summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Friesel <derf@finalrewind.org>2020-02-01 16:15:20 +0100
committerDaniel Friesel <derf@finalrewind.org>2020-02-01 16:15:20 +0100
commiteb3f4aed05d31509e0544ff29b382759ba31b9c2 (patch)
treefc863f10184cadba9504092881bfae420e93efd7
parent5439dbad343d9db39119cc0168b18bc9c58b195c (diff)
allow checkin and checkout station to be edited
-rwxr-xr-xlib/Travelynx.pm49
-rwxr-xr-xlib/Travelynx/Controller/Traveling.pm22
-rw-r--r--templates/edit_journey.html.ep24
-rw-r--r--templates/journey.html.ep6
4 files changed, 88 insertions, 13 deletions
diff --git a/lib/Travelynx.pm b/lib/Travelynx.pm
index 46911d8..aeb09d1 100755
--- a/lib/Travelynx.pm
+++ b/lib/Travelynx.pm
@@ -43,13 +43,22 @@ sub epoch_to_dt {
}
sub get_station {
- my ($station_name) = @_;
+ my ( $station_name, $exact_match ) = @_;
my @candidates
= Travel::Status::DE::IRIS::Stations::get_station($station_name);
if ( @candidates == 1 ) {
- return $candidates[0];
+ if ( not $exact_match ) {
+ return $candidates[0];
+ }
+ if ( $candidates[0][0] eq $station_name
+ or $candidates[0][1] eq $station_name
+ or $candidates[0][2] eq $station_name )
+ {
+ return $candidates[0];
+ }
+ return undef;
}
return undef;
}
@@ -187,10 +196,12 @@ sub startup {
return {
sched_departure => 0x0001,
real_departure => 0x0002,
+ from_station => 0x0004,
route => 0x0010,
is_cancelled => 0x0020,
sched_arrival => 0x0100,
real_arrival => 0x0200,
+ to_station => 0x0400,
};
}
);
@@ -912,7 +923,39 @@ sub startup {
);
eval {
- if ( $key eq 'sched_departure' ) {
+ if ( $key eq 'from_name' ) {
+ my $from_station = get_station( $value, 1 );
+ if ( not $from_station ) {
+ die("Unbekannter Startbahnhof\n");
+ }
+ $rows = $db->update(
+ 'journeys',
+ {
+ checkin_station_id => $from_station->[2],
+ edited => $journey->{edited} | 0x0004,
+ },
+ {
+ id => $journey_id,
+ }
+ )->rows;
+ }
+ elsif ( $key eq 'to_name' ) {
+ my $to_station = get_station( $value, 1 );
+ if ( not $to_station ) {
+ die("Unbekannter Zielbahnhof\n");
+ }
+ $rows = $db->update(
+ 'journeys',
+ {
+ checkout_station_id => $to_station->[2],
+ edited => $journey->{edited} | 0x0400,
+ },
+ {
+ id => $journey_id,
+ }
+ )->rows;
+ }
+ elsif ( $key eq 'sched_departure' ) {
$rows = $db->update(
'journeys',
{
diff --git a/lib/Travelynx/Controller/Traveling.pm b/lib/Travelynx/Controller/Traveling.pm
index e294c8c..b08864e 100755
--- a/lib/Travelynx/Controller/Traveling.pm
+++ b/lib/Travelynx/Controller/Traveling.pm
@@ -894,6 +894,17 @@ sub edit_journey {
}
}
}
+ for my $key (qw(from_name to_name)) {
+ if ( defined $self->param($key)
+ and $self->param($key) ne $journey->{$key} )
+ {
+ $error = $self->update_journey_part( $db, $journey->{id}, $key,
+ $self->param($key) );
+ if ($error) {
+ last;
+ }
+ }
+ }
for my $key (qw(comment)) {
if (
defined $self->param($key)
@@ -919,7 +930,7 @@ sub edit_journey {
}
}
{
- my $cancelled_old = $journey->{cancelled};
+ my $cancelled_old = $journey->{cancelled} // 0;
my $cancelled_new = $self->param('cancelled') // 0;
if ( $cancelled_old != $cancelled_new ) {
$error
@@ -955,7 +966,9 @@ sub edit_journey {
$self->param(
route => join( "\n", map { $_->[0] } @{ $journey->{route} } ) );
- $self->param( cancelled => $journey->{cancelled} );
+ $self->param( cancelled => $journey->{cancelled} ? 1 : 0 );
+ $self->param( from_name => $journey->{from_name} );
+ $self->param( to_name => $journey->{to_name} );
for my $key (qw(comment)) {
if ( $journey->{user_data} and $journey->{user_data}{$key} ) {
@@ -965,8 +978,9 @@ sub edit_journey {
$self->render(
'edit_journey',
- error => $error,
- journey => $journey
+ with_autocomplete => 1,
+ error => $error,
+ journey => $journey
);
}
diff --git a/templates/edit_journey.html.ep b/templates/edit_journey.html.ep
index 0eb8a99..c9aaa64 100644
--- a/templates/edit_journey.html.ep
+++ b/templates/edit_journey.html.ep
@@ -61,38 +61,50 @@
</td>
</tr>
<tr>
+ <th scope="row">Start:</th>
+ <td class="input-field">
+ %= text_field 'from_name', id => 'from_name', class => 'autocomplete validate', required => undef
+ </td>
+ </tr>
+ <tr>
<th scope="row">Geplante Abfahrt</th>
- <td>
+ <td class="input-field">
%= text_field 'sched_departure', id => 'sched_departure', class => 'validate', required => undef, pattern => '[0-9][0-9]?[.][0-9][0-9]?[.][0-9][0-9][0-9][0-9] +[0-9][0-9]:[0-9][0-9]'
</td>
</tr>
<tr>
<th scope="row">Tatsächliche Abfahrt</th>
- <td>
+ <td class="input-field">
%= text_field 'rt_departure', id => 'real_departure', class => 'validate', pattern => '[0-9][0-9]?[.][0-9][0-9]?[.][0-9][0-9][0-9][0-9] +[0-9][0-9]:[0-9][0-9]'
</td>
</tr>
<tr>
+ <th scope="row">Ziel:</th>
+ <td class="input-field">
+ %= text_field 'to_name', id => 'to_name', class => 'autocomplete validate', required => undef
+ </td>
+ </tr>
+ <tr>
<th scope="row">Geplante Ankunft</th>
- <td>
+ <td class="input-field">
%= text_field 'sched_arrival', id => 'sched_arrival', class => 'validate', required => undef, pattern => '[0-9][0-9]?[.][0-9][0-9]?[.][0-9][0-9][0-9][0-9] +[0-9][0-9]:[0-9][0-9]'
</td>
</tr>
<tr>
<th scope="row">Tatsächliche Ankunft</th>
- <td>
+ <td class="input-field">
%= text_field 'rt_arrival', id => 'real_arrival', class => 'validate', pattern => '[0-9][0-9]?[.][0-9][0-9]?[.][0-9][0-9][0-9][0-9] +[0-9][0-9]:[0-9][0-9]'
</td>
</tr>
<tr>
<th scope="row">Route</th>
- <td>
+ <td class="input-field">
%= text_area 'route', id => 'route', class => 'materialize-textarea'
</td>
</tr>
<tr>
<th scope="row">Kommentar</th>
- <td>
+ <td class="input-field">
%= text_field 'comment'
</td>
</tr>
diff --git a/templates/journey.html.ep b/templates/journey.html.ep
index 3a27194..ae8f750 100644
--- a/templates/journey.html.ep
+++ b/templates/journey.html.ep
@@ -25,8 +25,14 @@
% }
von
<b><%= $journey->{from_name} %></b>
+ % if ($journey->{edited} & 0x0004) {
+ ∗
+ % }
nach
<b><%= $journey->{to_name} %></b>
+ % if ($journey->{edited} & 0x0400) {
+ ∗
+ % }
am
<b><%= $journey->{sched_departure}->strftime('%d.%m.%Y') %></b>
</p>