e168d9cd39
Whether a user is in transit or not is now determined by an entry in the in_transit table instead of a dangling checkin. All completed journeys are stored in the "journeys" table. This does most of the work needed for automatic checkout. However, note that the corresponding worker process is not implemented yet.
180 lines
5 KiB
Text
180 lines
5 KiB
Text
% 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>
|
||
% if ($journey->{cancelled}) {
|
||
Ausgefallene Fahrt von
|
||
% }
|
||
% else {
|
||
Fahrt von
|
||
% }
|
||
<b><%= $journey->{from_name} %></b>
|
||
nach
|
||
<b><%= $journey->{to_name} %></b>
|
||
am
|
||
<b><%= $journey->{sched_departure}->strftime('%d.%m.%Y') %></b>
|
||
</p>
|
||
% if ($journey->{edited}) {
|
||
<p>
|
||
∗ Daten wurden manuell eingetragen
|
||
</p>
|
||
% }
|
||
<table class="striped">
|
||
<tr>
|
||
<th scope="row">Zug</th>
|
||
<td>
|
||
<%= $journey->{type} %> <%= $journey->{no} %>
|
||
% if ($journey->{line}) {
|
||
(Linie <%= $journey->{line} %>)
|
||
% }
|
||
</td>
|
||
</tr>
|
||
<tr>
|
||
<th scope="row">Abfahrt</th>
|
||
<td>
|
||
% if ($journey->{cancelled}) {
|
||
<i class="material-icons">cancel</i>
|
||
(Plan: <%= $journey->{sched_departure}->strftime('%H:%M'); %>)
|
||
% }
|
||
% elsif ($journey->{rt_departure} != $journey->{sched_departure}) {
|
||
%= $journey->{rt_departure}->strftime('%H:%M');
|
||
(<%= sprintf('%+d', ($journey->{rt_departure}->epoch - $journey->{sched_departure}->epoch) / 60) %>,
|
||
Plan: <%= $journey->{sched_departure}->strftime('%H:%M'); %>)
|
||
% }
|
||
% else {
|
||
%= $journey->{sched_departure}->strftime('%H:%M');
|
||
% }
|
||
% if ($journey->{edited} & 0x0003) {
|
||
∗
|
||
% }
|
||
</td>
|
||
</tr>
|
||
<tr>
|
||
<th scope="row">Ankunft</th>
|
||
<td>
|
||
% if ($journey->{cancelled}) {
|
||
<i class="material-icons">cancel</i>
|
||
% if ($journey->{sched_arrival}->epoch != 0) {
|
||
(Plan: <%= $journey->{sched_arrival}->strftime('%H:%M'); %>)
|
||
% }
|
||
% }
|
||
% elsif ($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');
|
||
(<%= sprintf('%+d', ($journey->{rt_arrival}->epoch - $journey->{sched_arrival}->epoch) / 60) %>,
|
||
Plan: <%= $journey->{sched_arrival}->strftime('%H:%M'); %>)
|
||
% }
|
||
% else {
|
||
%= $journey->{sched_arrival}->strftime('%H:%M');
|
||
% }
|
||
% if ($journey->{edited} & 0x0300) {
|
||
∗
|
||
% }
|
||
</td>
|
||
</tr>
|
||
<tr>
|
||
<th scope="row">Entfernung</th>
|
||
<td>
|
||
% if ($journey->{skip_route}) {
|
||
<i class="material-icons right">location_off</i>
|
||
<%= numify_skipped_stations($journey->{skip_route}) %><br/>
|
||
% }
|
||
% if ($journey->{km_route} > 0.1) {
|
||
ca. <%= sprintf('%.f', $journey->{km_route}) %> km
|
||
(Luftlinie: <%= sprintf('%.f', $journey->{km_beeline}) %> km)
|
||
% }
|
||
% else {
|
||
?
|
||
% }
|
||
</td>
|
||
</tr>
|
||
<tr>
|
||
<th scope="row">Geschwindigkeit</th>
|
||
<td>
|
||
% if ($journey->{skip_route}) {
|
||
<i class="material-icons right">location_off</i>
|
||
<%= numify_skipped_stations($journey->{skip_route}) %><br/>
|
||
% }
|
||
% if ($journey->{km_route} > 0.1 and $journey->{kmh_route} > 0.01) {
|
||
∅ <%= sprintf('%.f', $journey->{kmh_route}) %> km/h
|
||
(<%= sprintf('%.f', $journey->{kmh_beeline}) %> km/h)
|
||
% if ($journey->{edited} & 0x0303) {
|
||
∗
|
||
% }
|
||
% }
|
||
% else {
|
||
?
|
||
% }
|
||
</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>
|
||
<div class="row">
|
||
<div class="col s6 m6 l6 center-align">
|
||
<a class="waves-effect waves-light red btn action-delete"
|
||
data-id="<%= $journey->{id} %>"
|
||
data-checkin="<%= $journey->{checkin}->epoch %>"
|
||
data-checkout="<%= $journey->{checkout}->epoch %>">
|
||
<i class="material-icons left">delete_forever</i>
|
||
Löschen
|
||
</a>
|
||
</div>
|
||
<div class="col s6 m6 l6 center-align">
|
||
%= form_for '/journey/edit' => (method => 'POST') => begin
|
||
%= hidden_field 'journey_id' => param('journey_id')
|
||
<button class="btn waves-effect waves-light" type="submit" name="action" value="edit">
|
||
Bearbeiten
|
||
</button>
|
||
%= end
|
||
</div>
|
||
</div>
|
||
% }
|