Commit a830acc6 authored by Birte Kristina Friesel's avatar Birte Kristina Friesel
Browse files

Handle cancelled arrival at checkout when departure at checkin is not cancelled

parent ee38d48a
Loading
Loading
Loading
Loading
+33 −1
Original line number Diff line number Diff line
@@ -817,7 +817,6 @@ sub startup {
							arr_platform  => $train->platform,
							sched_arrival => $train->sched_arrival,
							real_arrival  => $train->arrival,
							cancelled => $train->arrival_is_cancelled ? 1 : 0,
							route =>
							  $json->encode( [ $self->route_diff($train) ] ),
							messages => $json->encode(
@@ -861,6 +860,39 @@ sub startup {
					}
					$self->invalidate_stats_cache( $cache_ts, $db, $uid );
				}
				elsif ( defined $train and $train->arrival_is_cancelled ) {

               # This branch is only taken if the deparure was not cancelled,
               # i.e., if the train was supposed to go here but got
               # redirected or cancelled on the way and not from the start on.
               # If the departure itself was cancelled, the user route is
               # 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 );

					$journey
					  = $db->select( 'in_transit', ['data'],
						{ user_id => $uid } )->expand->hash;
					$journey->{data}{cancelled_destination} = $train->station;

					$db->update(
						'in_transit',
						{
							checkout_station_id => undef,
							checkout_time       => undef,
							arr_platform        => undef,
							sched_arrival       => undef,
							real_arrival        => undef,
							data => JSON->new->encode( $journey->{data} ),
						},
						{ user_id => $uid }
					);
				}

				$tx->commit;
			};
+9 −1
Original line number Diff line number Diff line
@@ -134,8 +134,16 @@ sub run {
						checkout_station_id => $arr
					}
				);
				if ( $train->arrival_is_cancelled ) {

                  # check out (adds a cancelled journey and resets journey state
                  # to destination selection)
					$self->app->checkout( $arr, 0, $uid );
				}
				else {
					$self->app->add_route_timestamps( $uid, $train, 0 );
				}
			}
			elsif ( $entry->{real_arr_ts} ) {
				my ( undef, $error ) = $self->app->checkout( $arr, 1, $uid );
				if ($error) {
+7 −0
Original line number Diff line number Diff line
@@ -163,6 +163,13 @@
					</div>
				</p>
			% }
			% if ($journey->{extra_data}{cancelled_destination}) {
				<p style="margin-bottom: 2ex;">
					Der Halt in <b><%= $journey->{extra_data}{cancelled_destination} %></b>
					entfällt. Der Zugausfall wurde bereits vermerkt. Bitte wähle ein
					neues Reiseziel.
				</p>
			% }
			% if (@{$journey->{messages} // []} or @{$journey->{extra_data}{qos_msg} // []}) {
				<p style="margin-bottom: 2ex;">
					<ul>