diff options
| author | Derf Null <derf@finalrewind.org> | 2023-06-08 10:20:13 +0200 | 
|---|---|---|
| committer | Derf Null <derf@finalrewind.org> | 2023-06-08 10:20:13 +0200 | 
| commit | 619646b533bc27575131f7a521aac30a1431bfb1 (patch) | |
| tree | 2594110d1b21265fc16e0931e5e97427cfc5706d | |
| parent | e275fc6dbe84afa1c6dcff51ea34f35415a4f771 (diff) | |
warn when trying to check out at invalid unscheduled station1.32.3
Closes #72
| -rwxr-xr-x | lib/Travelynx/Controller/Traveling.pm | 33 | ||||
| -rw-r--r-- | templates/departures.html.ep | 55 | 
2 files changed, 66 insertions, 22 deletions
| diff --git a/lib/Travelynx/Controller/Traveling.pm b/lib/Travelynx/Controller/Traveling.pm index 2463bb5..d309753 100755 --- a/lib/Travelynx/Controller/Traveling.pm +++ b/lib/Travelynx/Controller/Traveling.pm @@ -845,20 +845,37 @@ sub station {  				  } @results;  			} +			my $user_status = $self->get_user_status; + +			my $can_check_out = 0; +			if ( $user_status->{checked_in} ) { +				for my $stop ( @{ $user_status->{route_after} } ) { +					if ( +						$stop->[1] eq $status->{station_eva} +						or List::Util::any { $stop->[1] eq $_->{uic} } +						@{ $status->{related_stations} } +					  ) +					{ +						$can_check_out = 1; +						last; +					} +				} +			} +  			my $connections_p;  			if ($train) {  				@results  				  = grep { $_->type . ' ' . $_->train_no eq $train } @results;  			}  			else { -				my $user = $self->get_user_status; -				if (    $user->{cancellation} +				if (    $user_status->{cancellation}  					and $status->{station_eva} eq -					$user->{cancellation}{dep_eva} ) +					$user_status->{cancellation}{dep_eva} )  				{  					$connections_p = $self->get_connecting_trains_p( -						eva              => $user->{cancellation}{dep_eva}, -						destination_name => $user->{cancellation}{arr_name} +						eva => $user_status->{cancellation}{dep_eva}, +						destination_name => +						  $user_status->{cancellation}{arr_name}  					);  				}  				else { @@ -878,6 +895,8 @@ sub station {  							hafas            => $use_hafas,  							station          => $status->{station_name},  							related_stations => $status->{related_stations}, +							user_status      => $user_status, +							can_check_out    => $can_check_out,  							connections      => $connecting_trains,  							title   => "travelynx: $status->{station_name}",  							version => $self->app->config->{version} @@ -893,6 +912,8 @@ sub station {  							hafas            => $use_hafas,  							station          => $status->{station_name},  							related_stations => $status->{related_stations}, +							user_status      => $user_status, +							can_check_out    => $can_check_out,  							title   => "travelynx: $status->{station_name}",  							version => $self->app->config->{version}  							  // 'UNKNOWN', @@ -908,6 +929,8 @@ sub station {  					hafas            => $use_hafas,  					station          => $status->{station_name},  					related_stations => $status->{related_stations}, +					user_status      => $user_status, +					can_check_out    => $can_check_out,  					title            => "travelynx: $status->{station_name}",  					version => $self->app->config->{version} // 'UNKNOWN',  				); diff --git a/templates/departures.html.ep b/templates/departures.html.ep index 857be74..852f876 100644 --- a/templates/departures.html.ep +++ b/templates/departures.html.ep @@ -6,37 +6,50 @@  		% }  	</div>  </div> -% my $status = $self->get_user_status;  % my $have_connections = 0; -% if ($status->{checked_in}) { +% if ($user_status->{checked_in}) {  	<div class="row">  		<div class="col s12">  			<div class="card">  				<div class="card-content">  					<span class="card-title">Aktuell eingecheckt</span> -					<p>In <%= $status->{train_type} %> <%= $status->{train_no} %> -						ab <%= $status->{dep_name} %></p> +					<p>In <%= $user_status->{train_type} %> <%= $user_status->{train_no} %> +						ab <%= $user_status->{dep_name} %></p>  				</div>  				<div class="card-action"> -					<a class="action-checkout" data-station="<%= $eva %>" data-force="1"> -						Hier auschecken -					</a> +					% if ($can_check_out) { +						<a class="action-undo" data-id="in_transit" data-checkints="<%= $user_status->{timestamp}->epoch %>"  style="margin-right: 0;"> +							<i class="material-icons left" aria-hidden="true">undo</i> Rückgängig +						</a> +						<a class="action-checkout right" data-station="<%= $eva %>" data-force="1"> +							Hier auschecken +						</a> +					% } +					% else { +						<a class="action-undo" data-id="in_transit" data-checkints="<%= $user_status->{timestamp}->epoch %>"  style="margin-right: 0;"> +							<i class="material-icons left" aria-hidden="true">undo</i> Rückgängig +						</a> +						<a class="action-checkout right" data-station="<%= $eva %>" data-force="1"> +							<i class="material-icons left">gps_off</i> +							Hier auschecken +						</a> +					% }  				</div>  			</div>  		</div>  	</div>  % } -% elsif ($status->{cancellation} and $station eq $status->{cancellation}{dep_name}) { +% elsif ($user_status->{cancellation} and $station eq $user_status->{cancellation}{dep_name}) {  	<div class="row">  		<div class="col s12"> -			%= include '_cancelled_departure', journey => $status->{cancellation}; +			%= include '_cancelled_departure', journey => $user_status->{cancellation};  		</div>  	</div>  % } -% elsif ($status->{timestamp_delta} < 180) { +% elsif ($user_status->{timestamp_delta} < 180) {  	<div class="row">  		<div class="col s12"> -			%= include '_checked_out', journey => $status; +			%= include '_checked_out', journey => $user_status;  		</div>  	</div>  % } @@ -55,7 +68,13 @@  			% if ($have_connections) {  				Alle Abfahrten –  			% } -			% if (@{$results}) { +			% if ($user_status->{checked_in} and not $can_check_out) { +				Diese Station liegt nicht auf der Route deines aktuellen Checkins. +				Falls du aktuell nicht mit <b><%= $user_status->{train_type} %> <%= $user_status->{train_no} %></b> unterwegs bist, kannst du den Checkin rückgängig machen. +				Falls es sich bei <b><%= $station %></b> um einen nicht in den Echtzeitdaten abgebildeten Zusatzhalt handelt, kannst du hier auchecken. +				Da travelynx nicht weiß, welcher der beiden Fälle zutrifft, sind bis dahin keine neuen Checkins möglich. +			% } +			% elsif (@{$results}) {  				Zug auswählen zum Einchecken.  			% }  			% else { @@ -63,11 +82,13 @@  				und maximal 120 Minuten nach Abfahrt möglich.  			% }  		</p> -		% if ($hafas) { -			%= include '_departures_hafas', results => $results; -		% } -		% else { -			%= include '_departures_iris', results => $results; +		% if (not ($user_status->{checked_in} and not $can_check_out)) { +			% if ($hafas) { +				%= include '_departures_hafas', results => $results; +			% } +			% else { +				%= include '_departures_iris', results => $results; +			% }  		% }  	</div>  </div> | 
