Loading lib/Travelynx.pm +21 −107 Original line number Diff line number Diff line Loading @@ -512,20 +512,10 @@ sub startup { my $db = $self->pg->db; my $tx = $db->begin; my $journey = $db->select( 'journeys', '*', { user_id => $uid, id => $journey_id } )->hash; $db->delete( 'journeys', { user_id => $uid, id => $journey_id } my $journey = $self->journeys->pop( uid => $uid, db => $db, journey_id => $journey_id ); if ( $journey->{edited} ) { Loading Loading @@ -744,10 +734,10 @@ sub startup { ); if ( $has_arrived or $force ) { delete $journey->{data}; $journey->{edited} = 0; $journey->{checkout_time} = $now; $db->insert( 'journeys', $journey ); $self->journeys->add_from_in_transit( db => $db, journey => $journey ); $self->in_transit->delete( uid => $uid, db => $db Loading Loading @@ -777,12 +767,11 @@ sub startup { # cancelled_from action -> 'cancelled journey' panel on main page # -> cancelled_to action -> force checkout (causing the # previous branch to be taken due to $force) $journey->{edited} = 0; $journey->{checkout_time} = $now; $journey->{cancelled} = 1; delete $journey->{data}; $db->insert( 'journeys', $journey ); $self->journeys->add_from_in_transit( db => $db, journey => $journey ); $self->in_transit->set_cancelled_destination( uid => $uid, db => $db, Loading Loading @@ -1079,47 +1068,6 @@ sub startup { } ); $self->helper( 'history_years' => sub { my ( $self, $uid ) = @_; $uid //= $self->current_user->{id}, my $res = $self->pg->db->select( 'journeys', 'distinct extract(year from real_departure) as year', { user_id => $uid }, { order_by => { -asc => 'year' } } ); my @ret; for my $row ( $res->hashes->each ) { push( @ret, [ $row->{year}, $row->{year} ] ); } return @ret; } ); $self->helper( 'history_months' => sub { my ( $self, $uid ) = @_; $uid //= $self->current_user->{id}, my $res = $self->pg->db->select( 'journeys', "distinct to_char(real_departure, 'YYYY.MM') as yearmonth", { user_id => $uid }, { order_by => { -asc => 'yearmonth' } } ); my @ret; for my $row ( $res->hashes->each ) { my ( $year, $month ) = split( qr{[.]}, $row->{yearmonth} ); push( @ret, [ "${year}/${month}", "${month}.${year}" ] ); } return @ret; } ); $self->helper( 'add_route_timestamps' => sub { my ( $self, $uid, $train, $is_departure ) = @_; Loading Loading @@ -1508,24 +1456,10 @@ sub startup { return $id; } my $journey = $db->select( 'journeys', ['checkout_station_id'], { user_id => $uid, cancelled => 0 }, { limit => 1, order_by => { -desc => 'real_departure' } } )->hash; if ( not $journey ) { return; } return $journey->{checkout_station_id}; return $self->journeys->get_latest_checkout_station_id( uid => $uid, db => $db ); } ); Loading Loading @@ -2054,30 +1988,10 @@ sub startup { return $ret; } my $latest = $db->select( 'journeys_str', '*', { user_id => $uid, cancelled => 0 }, { order_by => { -desc => 'journey_id' }, limit => 1 } )->expand->hash; my $latest_cancellation = $db->select( 'journeys_str', '*', { user_id => $uid, }, { order_by => { -desc => 'journey_id' }, limit => 1 } )->expand->hash; my ( $latest, $latest_cancellation ) = $self->journeys->get_latest( uid => $uid, db => $db ); if ( $latest_cancellation and $latest_cancellation->{cancelled} ) { if ( my $station Loading lib/Travelynx/Model/Journeys.pm +140 −0 Original line number Diff line number Diff line Loading @@ -197,6 +197,18 @@ sub add { return ( $journey_id, undef ); } sub add_from_in_transit { my ( $self, %opt ) = @_; my $db = $opt{db}; my $journey = $opt{journey}; delete $journey->{data}; $journey->{edited} = 0; $journey->{checkout_time} = DateTime->now( time_zone => 'Europe/Berlin' ); $db->insert( 'journeys', $journey ); } sub update { my ( $self, %opt ) = @_; Loading Loading @@ -414,6 +426,34 @@ sub delete { return sprintf( 'Deleted %d rows, expected 1', $rows ); } # Used for undo (move journey entry to in_transit) sub pop { my ( $self, %opt ) = @_; my $uid = $opt{uid}; my $db = $opt{db}; my $journey_id = $opt{journey_id}; my $journey = $db->select( 'journeys', '*', { user_id => $uid, id => $journey_id } )->hash; $db->delete( 'journeys', { user_id => $uid, id => $journey_id } ); return $journey; } sub get { my ( $self, %opt ) = @_; Loading Loading @@ -564,6 +604,40 @@ sub get_single { return $journeys[0]; } sub get_latest { my ( $self, %opt ) = @_; my $uid = $opt{uid}; my $db = $opt{db} // $self->{pg}->db; my $latest_successful = $db->select( 'journeys_str', '*', { user_id => $uid, cancelled => 0 }, { order_by => { -desc => 'journey_id' }, limit => 1 } )->expand->hash; my $latest = $db->select( 'journeys_str', '*', { user_id => $uid, }, { order_by => { -desc => 'journey_id' }, limit => 1 } )->expand->hash; return ( $latest_successful, $latest ); } sub get_oldest_ts { my ( $self, %opt ) = @_; my $uid = $opt{uid}; Loading @@ -589,6 +663,72 @@ sub get_oldest_ts { return undef; } sub get_latest_checkout_station_id { my ( $self, %opt ) = @_; my $uid = $opt{uid}; my $db = $opt{db} // $self->{pg}->db; my $res_h = $db->select( 'journeys', ['checkout_station_id'], { user_id => $uid, cancelled => 0 }, { limit => 1, order_by => { -desc => 'real_departure' } } )->hash; if ( not $res_h ) { return; } return $res_h->{checkout_station_id}; } sub get_years { my ( $self, %opt ) = @_; my $uid = $opt{uid}; my $db = $opt{db} // $self->{pg}->db; my $res = $db->select( 'journeys', 'distinct extract(year from real_departure) as year', { user_id => $uid }, { order_by => { -asc => 'year' } } ); my @ret; for my $row ( $res->hashes->each ) { push( @ret, [ $row->{year}, $row->{year} ] ); } return @ret; } sub get_months { my ( $self, %opt ) = @_; my $uid = $opt{uid}; my $db = $opt{db} // $self->{pg}->db; my $res = $db->select( 'journeys', "distinct to_char(real_departure, 'YYYY.MM') as yearmonth", { user_id => $uid }, { order_by => { -asc => 'yearmonth' } } ); my @ret; for my $row ( $res->hashes->each ) { my ( $year, $month ) = split( qr{[.]}, $row->{yearmonth} ); push( @ret, [ "${year}/${month}", "${month}.${year}" ] ); } return @ret; } sub sanity_check { my ( $self, $journey, $lax ) = @_; Loading templates/_history_months.html.ep +1 −1 Original line number Diff line number Diff line <div class="row"> <div class="col s12"> <ul class="pagination"> % for my $month (history_months()) { % for my $month (journeys->get_months(uid => current_user->{id})) { % my $link_to = $month->[0]; % my $text = $month->[1]; % my $class = $link_to eq $current ? 'active' : 'waves-effect'; Loading templates/_history_years.html.ep +1 −1 Original line number Diff line number Diff line <div class="row"> <div class="col s12"> <ul class="pagination"> % for my $year (history_years()) { % for my $year (journeys->get_years(uid => current_user->{id})) { % my $link_to = $year->[0]; % my $text = $year->[1]; % my $class = $link_to eq $current ? 'active' : 'waves-effect'; Loading Loading
lib/Travelynx.pm +21 −107 Original line number Diff line number Diff line Loading @@ -512,20 +512,10 @@ sub startup { my $db = $self->pg->db; my $tx = $db->begin; my $journey = $db->select( 'journeys', '*', { user_id => $uid, id => $journey_id } )->hash; $db->delete( 'journeys', { user_id => $uid, id => $journey_id } my $journey = $self->journeys->pop( uid => $uid, db => $db, journey_id => $journey_id ); if ( $journey->{edited} ) { Loading Loading @@ -744,10 +734,10 @@ sub startup { ); if ( $has_arrived or $force ) { delete $journey->{data}; $journey->{edited} = 0; $journey->{checkout_time} = $now; $db->insert( 'journeys', $journey ); $self->journeys->add_from_in_transit( db => $db, journey => $journey ); $self->in_transit->delete( uid => $uid, db => $db Loading Loading @@ -777,12 +767,11 @@ sub startup { # cancelled_from action -> 'cancelled journey' panel on main page # -> cancelled_to action -> force checkout (causing the # previous branch to be taken due to $force) $journey->{edited} = 0; $journey->{checkout_time} = $now; $journey->{cancelled} = 1; delete $journey->{data}; $db->insert( 'journeys', $journey ); $self->journeys->add_from_in_transit( db => $db, journey => $journey ); $self->in_transit->set_cancelled_destination( uid => $uid, db => $db, Loading Loading @@ -1079,47 +1068,6 @@ sub startup { } ); $self->helper( 'history_years' => sub { my ( $self, $uid ) = @_; $uid //= $self->current_user->{id}, my $res = $self->pg->db->select( 'journeys', 'distinct extract(year from real_departure) as year', { user_id => $uid }, { order_by => { -asc => 'year' } } ); my @ret; for my $row ( $res->hashes->each ) { push( @ret, [ $row->{year}, $row->{year} ] ); } return @ret; } ); $self->helper( 'history_months' => sub { my ( $self, $uid ) = @_; $uid //= $self->current_user->{id}, my $res = $self->pg->db->select( 'journeys', "distinct to_char(real_departure, 'YYYY.MM') as yearmonth", { user_id => $uid }, { order_by => { -asc => 'yearmonth' } } ); my @ret; for my $row ( $res->hashes->each ) { my ( $year, $month ) = split( qr{[.]}, $row->{yearmonth} ); push( @ret, [ "${year}/${month}", "${month}.${year}" ] ); } return @ret; } ); $self->helper( 'add_route_timestamps' => sub { my ( $self, $uid, $train, $is_departure ) = @_; Loading Loading @@ -1508,24 +1456,10 @@ sub startup { return $id; } my $journey = $db->select( 'journeys', ['checkout_station_id'], { user_id => $uid, cancelled => 0 }, { limit => 1, order_by => { -desc => 'real_departure' } } )->hash; if ( not $journey ) { return; } return $journey->{checkout_station_id}; return $self->journeys->get_latest_checkout_station_id( uid => $uid, db => $db ); } ); Loading Loading @@ -2054,30 +1988,10 @@ sub startup { return $ret; } my $latest = $db->select( 'journeys_str', '*', { user_id => $uid, cancelled => 0 }, { order_by => { -desc => 'journey_id' }, limit => 1 } )->expand->hash; my $latest_cancellation = $db->select( 'journeys_str', '*', { user_id => $uid, }, { order_by => { -desc => 'journey_id' }, limit => 1 } )->expand->hash; my ( $latest, $latest_cancellation ) = $self->journeys->get_latest( uid => $uid, db => $db ); if ( $latest_cancellation and $latest_cancellation->{cancelled} ) { if ( my $station Loading
lib/Travelynx/Model/Journeys.pm +140 −0 Original line number Diff line number Diff line Loading @@ -197,6 +197,18 @@ sub add { return ( $journey_id, undef ); } sub add_from_in_transit { my ( $self, %opt ) = @_; my $db = $opt{db}; my $journey = $opt{journey}; delete $journey->{data}; $journey->{edited} = 0; $journey->{checkout_time} = DateTime->now( time_zone => 'Europe/Berlin' ); $db->insert( 'journeys', $journey ); } sub update { my ( $self, %opt ) = @_; Loading Loading @@ -414,6 +426,34 @@ sub delete { return sprintf( 'Deleted %d rows, expected 1', $rows ); } # Used for undo (move journey entry to in_transit) sub pop { my ( $self, %opt ) = @_; my $uid = $opt{uid}; my $db = $opt{db}; my $journey_id = $opt{journey_id}; my $journey = $db->select( 'journeys', '*', { user_id => $uid, id => $journey_id } )->hash; $db->delete( 'journeys', { user_id => $uid, id => $journey_id } ); return $journey; } sub get { my ( $self, %opt ) = @_; Loading Loading @@ -564,6 +604,40 @@ sub get_single { return $journeys[0]; } sub get_latest { my ( $self, %opt ) = @_; my $uid = $opt{uid}; my $db = $opt{db} // $self->{pg}->db; my $latest_successful = $db->select( 'journeys_str', '*', { user_id => $uid, cancelled => 0 }, { order_by => { -desc => 'journey_id' }, limit => 1 } )->expand->hash; my $latest = $db->select( 'journeys_str', '*', { user_id => $uid, }, { order_by => { -desc => 'journey_id' }, limit => 1 } )->expand->hash; return ( $latest_successful, $latest ); } sub get_oldest_ts { my ( $self, %opt ) = @_; my $uid = $opt{uid}; Loading @@ -589,6 +663,72 @@ sub get_oldest_ts { return undef; } sub get_latest_checkout_station_id { my ( $self, %opt ) = @_; my $uid = $opt{uid}; my $db = $opt{db} // $self->{pg}->db; my $res_h = $db->select( 'journeys', ['checkout_station_id'], { user_id => $uid, cancelled => 0 }, { limit => 1, order_by => { -desc => 'real_departure' } } )->hash; if ( not $res_h ) { return; } return $res_h->{checkout_station_id}; } sub get_years { my ( $self, %opt ) = @_; my $uid = $opt{uid}; my $db = $opt{db} // $self->{pg}->db; my $res = $db->select( 'journeys', 'distinct extract(year from real_departure) as year', { user_id => $uid }, { order_by => { -asc => 'year' } } ); my @ret; for my $row ( $res->hashes->each ) { push( @ret, [ $row->{year}, $row->{year} ] ); } return @ret; } sub get_months { my ( $self, %opt ) = @_; my $uid = $opt{uid}; my $db = $opt{db} // $self->{pg}->db; my $res = $db->select( 'journeys', "distinct to_char(real_departure, 'YYYY.MM') as yearmonth", { user_id => $uid }, { order_by => { -asc => 'yearmonth' } } ); my @ret; for my $row ( $res->hashes->each ) { my ( $year, $month ) = split( qr{[.]}, $row->{yearmonth} ); push( @ret, [ "${year}/${month}", "${month}.${year}" ] ); } return @ret; } sub sanity_check { my ( $self, $journey, $lax ) = @_; Loading
templates/_history_months.html.ep +1 −1 Original line number Diff line number Diff line <div class="row"> <div class="col s12"> <ul class="pagination"> % for my $month (history_months()) { % for my $month (journeys->get_months(uid => current_user->{id})) { % my $link_to = $month->[0]; % my $text = $month->[1]; % my $class = $link_to eq $current ? 'active' : 'waves-effect'; Loading
templates/_history_years.html.ep +1 −1 Original line number Diff line number Diff line <div class="row"> <div class="col s12"> <ul class="pagination"> % for my $year (history_years()) { % for my $year (journeys->get_years(uid => current_user->{id})) { % my $link_to = $year->[0]; % my $text = $year->[1]; % my $class = $link_to eq $current ? 'active' : 'waves-effect'; Loading