Commit 11d77d4b authored by Birte Kristina Friesel's avatar Birte Kristina Friesel
Browse files

add journey detail view

parent 629ca9e9
Loading
Loading
Loading
Loading
+81 −8
Original line number Diff line number Diff line
@@ -241,6 +241,26 @@ app->attr(
		);
	}
);
app->attr(
	get_journey_actions_query => sub {
		my ($self) = @_;

		return $self->app->dbh->prepare(
			qq{
			select action_id, action_time, stations.ds100, stations.name,
			train_type, train_line, train_no, train_id,
			sched_time, real_time,
			route, messages
			from user_actions
			left outer join stations on station_id = stations.id
			where user_id = ?
			and (action_time = ? or action_time = ?)
			order by action_time desc
			limit 2
		}
		);
	}
);
app->attr(
	get_userid_query => sub {
		my ($self) = @_;
@@ -775,14 +795,21 @@ helper 'check_if_mail_is_blacklisted' => sub {
};

helper 'get_user_travels' => sub {
	my ( $self, $limit ) = @_;
	my ( $self, %opt ) = @_;

	my $uid   = $self->current_user->{id};
	my $query = $self->app->get_all_actions_query;
	if ($limit) {
	if ( $opt{limit} ) {
		$query = $self->app->get_last_actions_query;
	}

	if ( $opt{uid} and $opt{checkin_epoch} and $opt{checkout_epoch} ) {
		$query = $self->app->get_journey_actions_query;
		$query->execute( $opt{uid}, $opt{checkin_epoch}, $opt{checkout_epoch} );
	}
	else {
		$query->execute($uid);
	}

	my @travels;
	my $prev_action = 0;
@@ -805,6 +832,7 @@ helper 'get_user_travels' => sub {
					to_name       => $name,
					sched_arrival => epoch_to_dt($raw_sched_ts),
					rt_arrival    => epoch_to_dt($raw_real_ts),
					checkout      => epoch_to_dt($raw_ts),
					type          => $train_type,
					line          => $train_line,
					no            => $train_no,
@@ -823,13 +851,23 @@ helper 'get_user_travels' => sub {
			my $ref = $travels[-1];
			$ref->{from_name}       = $name;
			$ref->{completed}       = 1;
			$ref->{sched_departure} = epoch_to_dt($raw_sched_ts),
			  $ref->{rt_departure}  = epoch_to_dt($raw_real_ts),
			$ref->{sched_departure} = epoch_to_dt($raw_sched_ts);
			$ref->{rt_departure}    = epoch_to_dt($raw_real_ts);
			$ref->{checkin}         = epoch_to_dt($raw_ts);
			$ref->{type}     //= $train_type;
			$ref->{line}     //= $train_line;
			$ref->{no}       //= $train_no;
			$ref->{messages} //= [ split( qr{[|]}, $raw_messages ) ];
			$ref->{route}    //= [ split( qr{[|]}, $raw_route ) ];

			if ( $opt{verbose} ) {
				my @parsed_messages;
				for my $message ( @{ $ref->{messages} // [] } ) {
					my ( $ts, $msg ) = split( qr{:}, $message );
					push( @parsed_messages, [ epoch_to_dt($ts), $msg ] );
				}
				$ref->{messages} = [@parsed_messages];
			}
		}
		$prev_action = $action;
	}
@@ -1340,7 +1378,7 @@ get '/history' => sub {
	my ($self) = @_;

	$self->respond_to(
		json => { json     => [ $self->get_user_travels(0) ] },
		json => { json     => [ $self->get_user_travels ] },
		any  => { template => 'history' }
	);
};
@@ -1348,7 +1386,42 @@ get '/history' => sub {
get '/history.json' => sub {
	my ($self) = @_;

	$self->render( json => [ $self->get_user_travels(0) ] );
	$self->render( json => [ $self->get_user_travels ] );
};

get '/journey/:id' => sub {
	my ($self) = @_;
	my ( $uid, $checkin_ts, $checkout_ts ) = split( qr{-}, $self->stash('id') );

	if ( $uid != $self->current_user->{id} ) {
		$self->render(
			'journey',
			error   => 'notfound',
			journey => {}
		);
		return;
	}

	my @journeys = $self->get_user_travels(
		uid            => $uid,
		checkin_epoch  => $checkin_ts,
		checkout_epoch => $checkout_ts,
		verbose        => 1,
	);
	if ( @journeys == 0 ) {
		$self->render(
			'journey',
			error   => 'notfound',
			journey => {}
		);
		return;
	}

	$self->render(
		'journey',
		error   => undef,
		journey => $journeys[0]
	);
};

get '/export.json' => sub {
+4 −3
Original line number Diff line number Diff line
@@ -19,12 +19,13 @@
				</tr>
			</thead>
			<tbody>
				% for my $travel (get_user_travels(0)) {
				% for my $travel (get_user_travels()) {
					% if ($travel->{completed}) {
						% my $detail_link = '/journey/' . current_user()->{id} . '-' . $travel->{checkin}->epoch . '-' . $travel->{checkout}->epoch;
						<tr>
							<td><%= $travel->{sched_departure}->strftime('%d.%m.%Y') %></td>
							<td><%= $travel->{type} %> <%= $travel->{line} // '' %> <%= $travel->{no} %></td>
							<td><%= $travel->{from_name} %> → <%= $travel->{to_name} %></td>
							<td><a href="<%= $detail_link %>"><%= $travel->{type} %> <%= $travel->{line} // '' %> <%= $travel->{no} %></a></td>
							<td><a href="<%= $detail_link %>"><%= $travel->{from_name} %> → <%= $travel->{to_name} %></a></td>
							<td><%= $travel->{rt_departure}->strftime('%H:%M') %>
							% if ($travel->{sched_departure} != $travel->{rt_departure}) {
								(+<%= ($travel->{rt_departure}->epoch - $travel->{sched_departure}->epoch) / 60 %>)
+101 −0
Original line number Diff line number Diff line
% if ($error) {
	<div class="row">
		<div class="col s12">
			<div class="card red darken-4">
				<div class="card-content white-text">
					<span class="card-title">Fehler</span>
					<p>Zugfahrt nicht gefunden.<p/>
				</div>
			</div>
		</div>
	</div>
% }
% else {
	<div class="row">
		<div class="col s12">
			<p>
				Fahrt von
				<b><%= $journey->{from_name} %></b>
				nach
				<b><%= $journey->{to_name} %></b>
				am
				<b><%= $journey->{sched_departure}->strftime('%d.%m.%Y') %></b>
			</p>
			<table class="striped">
				<tr>
					<th scope="row">Zug</th>
					<td>
						<%= $journey->{type} %> <%= $journey->{no} %>
						% if ($journey->{line}) {
							(Linie <%= $journey->{type} %> <%= $journey->{line} %>)
						% }
					</td>
				</tr>
				<tr>
					<th scope="row">Abfahrt</th>
					<td>
						% if ($journey->{rt_departure} != $journey->{sched_departure}) {
							%= $journey->{rt_departure}->strftime('%H:%M');
							(+<%= ($journey->{rt_departure}->epoch - $journey->{sched_departure}->epoch) / 60 %>,
							Plan: <%= $journey->{sched_departure}->strftime('%H:%M'); %>)
						% }
						% else {
							%= $journey->{sched_departure}->strftime('%H:%M');
						% }
					</td>
				</tr>
				<tr>
					<th scope="row">Ankunft</th>
					<td>
						% if ($journey->{rt_arrival}->epoch == 0 and $journey->{sched_arrival}->epoch == 0) {
							<i class="material-icons">timer_off</i>
						% }
						% elsif ($journey->{rt_arrival} != $journey->{sched_arrival}) {
							%= $journey->{rt_arrival}->strftime('%H:%M');
							(+<%= ($journey->{rt_arrival}->epoch - $journey->{sched_arrival}->epoch) / 60 %>,
							Plan: <%= $journey->{sched_arrival}->strftime('%H:%M'); %>)
						% }
						% else {
							%= $journey->{sched_arrival}->strftime('%H:%M');
						% }
					</td>
				</tr>
				<tr>
					<th scope="row">Meldungen</th>
					<td>
						% for my $message (@{$journey->{messages} // []}) {
							% my ($ts, $msg) = @{$message};
							<%= $ts->strftime('%d.%m.%Y %H:%M') %> : <%= $msg %>
						% }
						<br/>
					</td>
				</tr>
				<tr>
					<th scope="row">Route</th>
					<td>
						% my $within = 0;
						% my $at_startstop = 0;
						% for my $station (@{$journey->{route}}) {
							% if ($station eq $journey->{from_name}) {
								% $within = 1; $at_startstop = 1;
							% }
							% elsif ($station eq $journey->{to_name}) {
								% $within = 0; $at_startstop = 1;
							% }
							% else {
								% $at_startstop = 0;
							% }
							% if ($at_startstop or $within) {
								<%= $station %>
							% }
							% else {
								<span style="color: #666666;"><%= $station %></span>
							% }
							<br/>
						% }
					</td>
				</tr>
			</table>
		</div>
	</div>
% }
+4 −3
Original line number Diff line number Diff line
@@ -75,12 +75,13 @@
				</tr>
			</thead>
			<tbody>
				% for my $travel (get_user_travels(1)) {
				% for my $travel (get_user_travels(limit => 1)) {
					% if ($travel->{completed}) {
						<tr>
							% my $detail_link = '/journey/' . current_user()->{id} . '-' . $travel->{checkin}->epoch . '-' . $travel->{checkout}->epoch;
							<td><%= $travel->{sched_departure}->strftime('%d.%m.%Y') %></td>
							<td><%= $travel->{type} %> <%= $travel->{line} // $travel->{no} %></td>
							<td><%= $travel->{from_name} %> → <%= $travel->{to_name} %></td>
							<td><a href="<%= $detail_link %>"><%= $travel->{type} %> <%= $travel->{line} // $travel->{no} %></a></td>
							<td><a href="<%= $detail_link %>"><%= $travel->{from_name} %> → <%= $travel->{to_name} %></a></td>
							% if ($travel->{rt_arrival}->epoch and $travel->{rt_departure}->epoch) {
								<td><%= ($travel->{rt_arrival}->epoch - $travel->{rt_departure}->epoch) / 60 %> min
								</td>