diff options
Diffstat (limited to 'lib/Travelynx/Model')
| -rwxr-xr-x | lib/Travelynx/Model/Journeys.pm | 158 |
1 files changed, 56 insertions, 102 deletions
diff --git a/lib/Travelynx/Model/Journeys.pm b/lib/Travelynx/Model/Journeys.pm index f532b8b..ea3461c 100755 --- a/lib/Travelynx/Model/Journeys.pm +++ b/lib/Travelynx/Model/Journeys.pm @@ -50,56 +50,6 @@ sub epoch_to_dt { ); } -# TODO turn into a travelynx helper called from templates so that -# loc_handle is available for localization -sub min_to_human { - my ( $self, $minutes ) = @_; - - my @ret; - - if ( $minutes >= 14 * 24 * 60 ) { - push( @ret, int( $minutes / ( 7 * 24 * 60 ) ) . ' Wochen' ); - } - elsif ( $minutes >= 7 * 24 * 60 ) { - push( @ret, '1 Woche' ); - } - $minutes %= 7 * 24 * 60; - - if ( $minutes >= 2 * 24 * 60 ) { - push( @ret, int( $minutes / ( 24 * 60 ) ) . ' Tage' ); - } - elsif ( $minutes >= 24 * 60 ) { - push( @ret, '1 Tag' ); - } - $minutes %= 24 * 60; - - if ( $minutes >= 2 * 60 ) { - push( @ret, int( $minutes / 60 ) . ' Stunden' ); - } - elsif ( $minutes >= 60 ) { - push( @ret, '1 Stunde' ); - } - $minutes %= 60; - - if ( $minutes >= 2 ) { - push( @ret, "$minutes Minuten" ); - } - elsif ($minutes) { - push( @ret, '1 Minute' ); - } - - if ( @ret == 0 ) { - return '0 Minuten'; - } - - if ( @ret == 1 ) { - return $ret[0]; - } - - my $last = pop(@ret); - return join( ', ', @ret ) . " und $last"; -} - sub new { my ( $class, %opt ) = @_; @@ -698,9 +648,14 @@ sub get { user_id => $uid, cancelled => 0 ); + + my $order_key = '-desc'; + if ( $opt{sort} and $opt{sort} eq 'asc' ) { + $order_key = '-asc'; + } my %order = ( order_by => { - -desc => 'real_dep_ts', + $order_key => 'real_dep_ts', } ); @@ -1046,20 +1001,20 @@ sub get_latest_checkout_stations { my @ret; while ( my $row = $res->hash ) { - push( - @ret, - { - name => $row->{arr_name}, - eva => $row->{arr_eva}, - external_id_or_eva => $row->{arr_external_id} - // $row->{arr_eva}, - dbris => $row->{is_dbris} ? $row->{backend_name} : 0, - efa => $row->{is_efa} ? $row->{backend_name} : 0, - hafas => $row->{is_hafas} ? $row->{backend_name} : 0, - motis => $row->{is_motis} ? $row->{backend_name} : 0, - backend_id => $row->{backend_id}, - } - ); + my $entry = { + name => $row->{arr_name}, + eva => $row->{arr_eva}, + external_id_or_eva => $row->{arr_external_id} // $row->{arr_eva}, + dbris => $row->{is_dbris} ? $row->{backend_name} : 0, + efa => $row->{is_efa} ? $row->{backend_name} : 0, + hafas => $row->{is_hafas} ? $row->{backend_name} : 0, + motis => $row->{is_motis} ? $row->{backend_name} : 0, + backend_id => $row->{backend_id}, + }; + if ( $row->{is_dbris} ) { + $entry->{external_id_or_eva} = '@L=' . $row->{arr_eva}; + } + push( @ret, $entry ); } return @ret; @@ -1560,6 +1515,17 @@ sub compute_review { } } } + if ( $journey->{user_data}{him_msg} + and @{ $journey->{user_data}{him_msg} } ) + { + $message_count += 1; + for my $message ( @{ $journey->{user_data}{him_msg} } ) { + if ( not $seen{ $message->{lead} } ) { + $num_by_message{ $message->{lead} } += 1; + $seen{ $message->{lead} } = 1; + } + } + } if ( $journey->{type} ) { $num_by_linetype{ $journey->{type} } += 1; @@ -1658,7 +1624,7 @@ sub compute_review { $review{traveling_percentage_year} = sprintf( "%.1f%%", $min_total * 100 / 525948.77 ); $review{traveling_percentage_year} =~ tr{.}{,}; - $review{traveling_time_year} = $self->min_to_human($min_total); + $review{traveling_time_year} = $min_total; if (@linetypes) { $review{typical_type_1} = $linetypes[0][0]; @@ -1673,24 +1639,18 @@ sub compute_review { elsif ( @stops == 2 ) { $review{typical_stops_2} = [ $stops[0][0], $stops[1][0] ]; } - $review{typical_time} - = $self->min_to_human( $stats->{min_travel_real} / $stats->{num_trains} ); + $review{typical_time} = $stats->{min_travel_real} / $stats->{num_trains}; $review{typical_km} = sprintf( '%.0f', $stats->{km_route} / $stats->{num_trains} ); $review{typical_kmh} = sprintf( '%.0f', $stats->{km_route} / ( $stats->{min_travel_real} / 60 ) ); $review{typical_delay_dep} = sprintf( '%.0f', $stats->{delay_dep} / $stats->{num_trains} ); - $review{typical_delay_dep_h} - = $self->min_to_human( $review{typical_delay_dep} ); $review{typical_delay_arr} = sprintf( '%.0f', $stats->{delay_arr} / $stats->{num_trains} ); - $review{typical_delay_arr_h} - = $self->min_to_human( $review{typical_delay_arr} ); if ($longest_t) { - $review{longest_t_time} - = $self->min_to_human( $longest_t->{rt_duration} / 60 ); + $review{longest_t_min} = $longest_t->{rt_duration} / 60; $review{longest_t_type} = $longest_t->{type}; $review{longest_t_lineno} = $longest_t->{line} // $longest_t->{no}; $review{longest_t_from} = $longest_t->{from_name}; @@ -1708,8 +1668,7 @@ sub compute_review { } if ($shortest_t) { - $review{shortest_t_time} - = $self->min_to_human( $shortest_t->{rt_duration} / 60 ); + $review{shortest_t_min} = $shortest_t->{rt_duration} / 60; $review{shortest_t_type} = $shortest_t->{type}; $review{shortest_t_lineno} = $shortest_t->{line} // $shortest_t->{no}; $review{shortest_t_from} = $shortest_t->{from_name}; @@ -1729,12 +1688,10 @@ sub compute_review { } if ($most_delayed) { - $review{most_delayed_type} = $most_delayed->{type}; - $review{most_delayed_delay_dep} - = $self->min_to_human( $most_delayed->{delay_dep} ); - $review{most_delayed_delay_arr} - = $self->min_to_human( $most_delayed->{delay_arr} ); - $review{most_delayed_lineno} = $most_delayed->{line} + $review{most_delayed_type} = $most_delayed->{type}; + $review{most_delayed_delay_dep} = $most_delayed->{delay_dep}; + $review{most_delayed_delay_arr} = $most_delayed->{delay_arr}; + $review{most_delayed_lineno} = $most_delayed->{line} // $most_delayed->{no}; $review{most_delayed_from} = $most_delayed->{from_name}; $review{most_delayed_to} = $most_delayed->{to_name}; @@ -1742,17 +1699,13 @@ sub compute_review { } if ($most_delay) { - $review{most_delay_type} = $most_delay->{type}; - $review{most_delay_delay_dep} = $most_delay->{delay_dep}; - $review{most_delay_delay_arr} = $most_delay->{delay_arr}; - $review{most_delay_sched_time} - = $self->min_to_human( $most_delay->{sched_duration} / 60 ); - $review{most_delay_real_time} - = $self->min_to_human( $most_delay->{rt_duration} / 60 ); + $review{most_delay_type} = $most_delay->{type}; + $review{most_delay_delay_dep} = $most_delay->{delay_dep}; + $review{most_delay_delay_arr} = $most_delay->{delay_arr}; + $review{most_delay_sched_time} = $most_delay->{sched_duration} / 60; + $review{most_delay_real_time} = $most_delay->{rt_duration} / 60; $review{most_delay_delta} - = $self->min_to_human( - ( $most_delay->{rt_duration} - $most_delay->{sched_duration} ) - / 60 ); + = ( $most_delay->{rt_duration} - $most_delay->{sched_duration} ) / 60; $review{most_delay_lineno} = $most_delay->{line} // $most_delay->{no}; $review{most_delay_from} = $most_delay->{from_name}; $review{most_delay_to} = $most_delay->{to_name}; @@ -1760,17 +1713,14 @@ sub compute_review { } if ($most_undelay) { - $review{most_undelay_type} = $most_undelay->{type}; - $review{most_undelay_delay_dep} = $most_undelay->{delay_dep}; - $review{most_undelay_delay_arr} = $most_undelay->{delay_arr}; - $review{most_undelay_sched_time} - = $self->min_to_human( $most_undelay->{sched_duration} / 60 ); - $review{most_undelay_real_time} - = $self->min_to_human( $most_undelay->{rt_duration} / 60 ); + $review{most_undelay_type} = $most_undelay->{type}; + $review{most_undelay_delay_dep} = $most_undelay->{delay_dep}; + $review{most_undelay_delay_arr} = $most_undelay->{delay_arr}; + $review{most_undelay_sched_time} = $most_undelay->{sched_duration} / 60; + $review{most_undelay_real_time} = $most_undelay->{rt_duration} / 60; $review{most_undelay_delta} - = $self->min_to_human( - ( $most_undelay->{sched_duration} - $most_undelay->{rt_duration} ) - / 60 ); + = ( $most_undelay->{sched_duration} - $most_undelay->{rt_duration} ) + / 60; $review{most_undelay_lineno} = $most_undelay->{line} // $most_undelay->{no}; $review{most_undelay_from} = $most_undelay->{from_name}; @@ -2108,6 +2058,7 @@ sub get_connection_targets { my $min_count = $opt{min_count} // 3; my $backend_id = $opt{backend_id}; my $dest_id = $opt{eva}; + my $exclude_id = $opt{exclude}; $self->{log}->debug( "get_connection_targets(uid => $uid, backend_id => $backend_id, dest_id => $dest_id)" @@ -2163,6 +2114,9 @@ sub get_connection_targets { backend_id => $opt{backend_id}, evas => [@destinations] ); + if ( defined $exclude_id ) { + @destinations = grep { $_->{eva} != $exclude_id } @destinations; + } return @destinations; } |
