diff options
| author | Daniel Friesel <derf@finalrewind.org> | 2022-04-02 15:24:39 +0200 | 
|---|---|---|
| committer | Daniel Friesel <derf@finalrewind.org> | 2022-04-02 15:24:39 +0200 | 
| commit | 5dfbdd864433a01271e8025842b20608146e5152 (patch) | |
| tree | 835f2b4128761bf82ad9e58ead55b503a314a6e9 /lib | |
| parent | 5cd25d442f01e6159fde7814acac5a5c201a3a6c (diff) | |
history map: add filter by date
Diffstat (limited to 'lib')
| -rwxr-xr-x | lib/Travelynx/Controller/Traveling.pm | 29 | ||||
| -rwxr-xr-x | lib/Travelynx/Model/Journeys.pm | 31 | 
2 files changed, 47 insertions, 13 deletions
| diff --git a/lib/Travelynx/Controller/Traveling.pm b/lib/Travelynx/Controller/Traveling.pm index 9f8a193..7a036a7 100755 --- a/lib/Travelynx/Controller/Traveling.pm +++ b/lib/Travelynx/Controller/Traveling.pm @@ -797,11 +797,38 @@ sub map_history {  	}  	my $route_type    = $self->param('route_type'); +	my $filter_from   = $self->param('filter_after'); +	my $filter_until  = $self->param('filter_before');  	my $with_polyline = $route_type eq 'beeline' ? 0 : 1; +	my $parser = DateTime::Format::Strptime->new( +		pattern   => '%d.%m.%Y', +		locale    => 'de_DE', +		time_zone => 'Europe/Berlin' +	); + +	if ( $filter_from and $filter_from =~ m{ ^ (\d+) [.] (\d+) [.] (\d+) $ }x ) +	{ +		$filter_from = $parser->parse_datetime($filter_from); +	} +	else { +		$filter_from = undef; +	} + +	if (    $filter_until +		and $filter_until =~ m{ ^ (\d+) [.] (\d+) [.] (\d+) $ }x ) +	{ +		$filter_until = $parser->parse_datetime($filter_until); +	} +	else { +		$filter_until = undef; +	} +  	my @journeys = $self->journeys->get(  		uid           => $self->current_user->{id}, -		with_polyline => $with_polyline +		with_polyline => $with_polyline, +		after         => $filter_from, +		before        => $filter_until,  	);  	if ( not @journeys ) { diff --git a/lib/Travelynx/Model/Journeys.pm b/lib/Travelynx/Model/Journeys.pm index 2e97150..8567d27 100755 --- a/lib/Travelynx/Model/Journeys.pm +++ b/lib/Travelynx/Model/Journeys.pm @@ -156,7 +156,7 @@ sub add {  				push( @route, [ $station_info->[1], {}, undef ] );  			}  			else { -				push( @route, [ $station, {}, undef ] ); +				push( @route,            [ $station, {}, undef ] );  				push( @unknown_stations, $station );  			}  		} @@ -519,6 +519,12 @@ sub get {  		$where{real_dep_ts}  		  = { -between => [ $opt{after}->epoch, $opt{before}->epoch, ] };  	} +	elsif ( $opt{after} ) { +		$where{real_dep_ts} = { '>=', $opt{after}->epoch }; +	} +	elsif ( $opt{before} ) { +		$where{real_dep_ts} = { '<=', $opt{before}->epoch }; +	}  	if ( $opt{with_polyline} ) {  		push( @select, 'polyline' ); @@ -975,9 +981,10 @@ sub get_travel_distance {  	for my $station (@polyline) {  		#lonlatlonlat -		$distance_polyline -		  += $geo->distance_metal( $prev_station->[1], -			$prev_station->[0], $station->[1], $station->[0] ); +		$distance_polyline += $geo->distance_metal( +			$prev_station->[1], $prev_station->[0], +			$station->[1],      $station->[0] +		);  		$prev_station = $station;  	} @@ -1004,9 +1011,10 @@ sub get_travel_distance {  				$to_station_beeline = $station;  			}  			if ( $#{$prev_station} >= 4 and $#{$station} >= 4 ) { -				$distance_intermediate -				  += $geo->distance_metal( $prev_station->[4], -					$prev_station->[3], $station->[4], $station->[3] ); +				$distance_intermediate += $geo->distance_metal( +					$prev_station->[4], $prev_station->[3], +					$station->[4],      $station->[3] +				);  			}  			else {  				$skipped++; @@ -1017,9 +1025,8 @@ sub get_travel_distance {  	if ( $from_station_beeline and $to_station_beeline ) {  		$distance_beeline = $geo->distance_metal( -			$from_station_beeline->[4], -			$from_station_beeline->[3], $to_station_beeline->[4], -			$to_station_beeline->[3] +			$from_station_beeline->[4], $from_station_beeline->[3], +			$to_station_beeline->[4],   $to_station_beeline->[3]  		);  	} @@ -1120,8 +1127,8 @@ sub get_stats {  	}  	my $uid   = $opt{uid}; -	my $db    = $opt{db} // $self->{pg}->db; -	my $year  = $opt{year} // 0; +	my $db    = $opt{db}    // $self->{pg}->db; +	my $year  = $opt{year}  // 0;  	my $month = $opt{month} // 0;  	# Assumption: If the stats cache contains an entry it is up-to-date. | 
