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

Prepare forms for manual journey entry and editing

parent d4269a8f
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -1475,8 +1475,10 @@ qq{select * from pending_mails where email = ? and num_tries > 1;}
	$authed_r->get('/history')->to('traveling#history');
	$authed_r->get('/history/:year')->to('traveling#yearly_history');
	$authed_r->get('/history/:year/:month')->to('traveling#monthly_history');
	$authed_r->get('/journey/add')->to('traveling#add_journey_form');
	$authed_r->get('/journey/:id')->to('traveling#journey_details');
	$authed_r->get('/s/*station')->to('traveling#station');
	$authed_r->post('/journey/edit')->to('traveling#edit_journey');
	$authed_r->post('/change_password')->to('account#change_password');
	$authed_r->post('/delete')->to('account#delete');
	$authed_r->post('/logout')->to('account#do_logout');
+58 −0
Original line number Diff line number Diff line
@@ -378,6 +378,8 @@ sub journey_details {
	my ($self) = @_;
	my ( $uid, $checkout_id ) = split( qr{-}, $self->stash('id') );

	$self->param( journey_id => $checkout_id );

	if ( not( $uid == $self->current_user->{id} and $checkout_id ) ) {
		$self->render(
			'journey',
@@ -411,4 +413,60 @@ sub journey_details {
	);
}

sub edit_journey {
	my ($self)      = @_;
	my $checkout_id = $self->param('journey_id');
	my $uid         = $self->current_user->{id};

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

	my @journeys = $self->get_user_travels(
		uid         => $uid,
		checkout_id => $checkout_id,
	);
	if (   @journeys == 0
		or not $journeys[0]{completed}
		or $journeys[0]{ids}[1] != $checkout_id )
	{
		$self->render(
			'edit_journey',
			error   => 'notfound',
			journey => {}
		);
		return;
	}

	my $journey = $journeys[0];

	for my $key (qw(sched_departure rt_departure sched_arrival rt_arrival)) {
		if ( $journey->{$key} and $journey->{$key}->epoch ) {
			$self->param(
				$key => $journey->{$key}->strftime('%d.%m.%Y %H:%M') );
		}
	}

	if ( $journey->{route} ) {
		$self->param( route => join( "\n", @{ $journey->{route} } ) );
	}

	$self->render(
		'edit_journey',
		error   => undef,
		journey => $journey
	);
}

sub add_journey_form {
	my ($self) = @_;

	$self->render( 'add_journey', error => undef );
}

1;
+63 −0
Original line number Diff line number Diff line
<h1>Zugfahrt eingeben</h1>
% 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">Ungültige Eingabe</span>
					<p><%= $error %></p>
				</div>
			</div>
		</div>
	</div>
% }
<div class="row">
	<div class="col s12">
		<ul>
			<li>Eingabe des Zugs als „Zug Typ Nummer“ oder „Zug Nummer“, z.B.
				„ICE 100“, „S 1 31133“ oder „ABR RE11 26720“</li>
			<li>Zeitangaben im Format DD.MM.YYYY HH:MM</li>
		</ul>
	</div>
</div>
%= form_for '/journey/add' => (method => 'POST') => begin
	%= csrf_field
	<div class="row">
		<div class="input-field col s12">
			%= text_field 'train', id => 'train', class => 'validate', required => undef, pattern => '[0-9a-zA-Z]+ +[0-9a-zA-Z]* *[0-9]+'
			<label for="train">Zug (Typ Linie Nummer)</label>
		</div>
	</div>
	<div class="row">
		<div class="input-field col s12">
			%= 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]'
			<label for="sched_departure">Geplante Abfahrt</label>
		</div>
		<div class="input-field col s12">
			%= text_field 'rt_departure', id => 'rt_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]'
			<label for="rt_departure">Tatsächliche Abfahrt (optional)</label>
		</div>
	</div>
	<div class="row">
		<div class="input-field col s12">
			%= 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]'
			<label for="sched_arrival">Geplante Ankunft</label>
		</div>
		<div class="input-field col s12">
			%= text_field 'rt_arrival', id => 'rt_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]'
			<label for="rt_arrival">Tatsächliche Ankunft (optional)</label>
		</div>
	</div>
	<div class="row">
		<div class="col s3 m3 l3">
		</div>
		<div class="col s6 m6 l6 center-align">
			<button class="btn waves-effect waves-light" type="submit" name="action" value="save">
				Hinzufügen
				<i class="material-icons right">send</i>
			</button>
		</div>
		<div class="col s3 m3 l3">
		</div>
	</div>
%= end
+94 −0
Original line number Diff line number Diff line
% if ($error and $error eq 'notfound') {
	<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 {
	% 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">Ungültige Eingabe</span>
						<p><%= $error %></p>
					</div>
				</div>
			</div>
		</div>
	% }
	%= form_for '/journey/edit' => (method => 'POST') => begin
		%= csrf_field
		<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->{line} %>)
							% }
						</td>
					</tr>
					<tr>
						<th scope="row">Geplante Abfahrt</th>
						<td>
							%= 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>
							%= 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">Geplante Ankunft</th>
						<td>
							%= 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>
							%= 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>
							%= text_area 'route', id => 'route', cols => 40, rows => 20
						</td>
					</tr>
				</table>
			</div>
		</div>
		<div class="row">
			<div class="col s3 m3 l3">
			</div>
			<div class="col s6 m6 l6 center-align">
				<button class="btn waves-effect waves-light" type="submit" name="action" value="save">
					Speichern
					<i class="material-icons right">send</i>
				</button>
			</div>
			<div class="col s3 m3 l3">
			</div>
		</div>
	%= end
% }
+7 −3
Original line number Diff line number Diff line
@@ -129,8 +129,6 @@
		</div>
	</div>
	<div class="row">
		<div class="col s3 m3 l3">
		</div>
		<div class="col s6 m6 l6 center-align">
			<a class="waves-effect waves-light red btn action-delete"
					data-id="<%= join(q{,}, @{$journey->{ids}}) %>"
@@ -140,7 +138,13 @@
				Löschen
			</a>
		</div>
		<div class="col s3 m3 l3">
		<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" disabled="disabled">
					Bearbeiten
				</button>
			%= end
		</div>
	</div>
% }