}
$c->stash->{'menu_path'} = [] unless $c->stash->{'menu_path'};
- $self->add_verlaglist_menu($c) if $c->session->{'from_ort_list'};
+ $self->add_ortslist_menu($c) if $c->session->{'from_ort_list'};
push @{ $c->stash->{'menu_path'} }, {
'path' => $c->web_path("/ort/new"),
'name' => "Neu"
#-------------------------------------------------------
+=head2 form_edit( )
+
+Aendern eines vorhandenen Aufbewahrungsortes.
+
+=cut
+
+sub form_edit : Path('edit') {
+
+ my ( $self, $c ) = @_;
+ my $K = ( caller(0) )[3] . "(): ";
+
+ $c->log->debug( $K . "aufgerufen." ) if $c->stash->{'debug_level'} > 2;
+
+ unless ( $c->user_exists() ) {
+ $c->detach('/not_allowed');
+ return;
+ }
+
+ $c->stash->{'menu_path'} = [] unless $c->stash->{'menu_path'};
+ $self->add_ortslist_menu($c) if $c->session->{'from_ort_list'};
+ push @{ $c->stash->{'menu_path'} }, {
+ 'path' => $c->web_path("/ort/edit"),
+ 'name' => "Ändern"
+ };
+
+ $c->stash->{'error_message'} = '';
+
+ # Zu bearbeitende Orts-Id ermitteln
+ my $orts_id = to_int( $c->request->params->{'edit_orts_id'} || 0 );
+
+ unless ( $orts_id ) {
+ if ( $c->session->{'ort_data_edit'} and $c->session->{'ort_data_edit'}{'id'} ) {
+ $orts_id = $c->session->{'ort_data_edit'}{'id'};
+ }
+ }
+
+ # Keine Orts-Id da?
+ unless ( $orts_id ) {
+ $c->stash->{'template'} = 'error.tt2';
+ $c->stash->{'error'} = 'Keine oder ungültige Aufbewahrungsorts-Id übergeben.';
+ return 1;
+ }
+
+ # Angaben zum Aufbewahrungsort aus der Datenbank holen
+ my $ortsliste = get_ortsliste( $c, 'orts_id' => $orts_id, );
+
+ unless ( $ortsliste and scalar( @$ortsliste ) ) {
+ $c->stash->{'template'} = 'error.tt2';
+ $c->stash->{'error'} = 'Zur übergebenen Aufbewahrungsorts-Id wurde kein Aufbewahrungsort gefunden.';
+ return 1;
+ }
+
+ my $ort = $ortsliste->[0];
+ $c->log->debug( get_output_string( $K, "Aufbewahrungsort aus Datenbank: ", $ort ) ) if $c->stash->{'debug_level'} >= 2;
+
+ # Ruecksprung-URL bestimmen
+ $c->stash->{'return_target'} = $c->session->{'return_target_edit'} or $c->web_path("/ort/list");
+
+ # Sitzungsdaten vorbelegen, falls noch nicht geschehen
+ if ( $c->session->{'ort_data_edit'} ) {
+ if ( ! $c->session->{'ort_data_edit'}{'id'} or $c->session->{'ort_data_edit'}{'id'} != $orts_id ) {
+ $c->session->{'ort_data_edit'} = $ort;
+ }
+ }
+ else {
+ $c->session->{'ort_data_edit'} = $ort;
+ }
+ $ortsliste = undef;
+
+ $self->ort_cgi2session($c);
+
+ $c->stash->{'template'} = 'ort/edit.tt2';
+ push @{$c->stash->{'cssfiles'}}, 'ort/form.css';
+
+ $self->ort_session2stash($c);
+
+ unless ( $c->request->params->{'ort_form_sent'} and $c->request->params->{'do_save'} ) {
+ return 1;
+ }
+
+ $c->stash->{'return_target_action'} = $c->session->{'return_target_edit'};
+ return $self->do_save_ort($c);
+
+}
+
+#-------------------------------------------------------
+
+=head2 delete_ort_form( )
+
+Loescht einen vorhandenen Aufbewahrungsort.
+
+=cut
+
+sub delete_ort_form : Path('delete') {
+
+ my ( $self, $c ) = @_;
+ my $K = ( caller(0) )[3] . "(): ";
+
+ $c->log->debug( $K . "aufgerufen." ) if $c->stash->{'debug_level'} > 2;
+
+ unless ( $c->user_exists() ) {
+ $c->detach('/not_allowed');
+ return;
+ }
+
+ $c->stash->{'menu_path'} = [] unless $c->stash->{'menu_path'};
+ $self->add_ortslist_menu($c) if $c->session->{'from_ort_list'};
+ push @{ $c->stash->{'menu_path'} }, {
+ 'path' => $c->web_path("/ort/delete"),
+ 'name' => "Löschen"
+ };
+
+ $c->stash->{'error_message'} = '';
+
+ # Zu löschende Orts-Id ermitteln
+ my $orts_id = to_int( $c->request->params->{'delete_orts_id'} || $c->session->{'delete_orts_id'} || 0 );
+ # Keine Orts-Id da?
+ unless ( $orts_id ) {
+ $c->stash->{'template'} = 'error.tt2';
+ $c->stash->{'error'} = 'Keine oder ungültige Aufbewahrungsort
+s-Id übergeben.';
+ return 1;
+ }
+ $c->session->{'delete_orts_id'} = $orts_id;
+
+ # Angaben zum Aufbewahrungsort aus der Datenbank holen
+ my $ortsliste = get_ortsliste( $c, 'orts_id' => $orts_id, );
+
+ unless ( $ortsliste and scalar( @$ortsliste ) ) {
+ $c->stash->{'template'} = 'error.tt2';
+ $c->stash->{'error'} = 'Zur übergebenen Aufbewahrungsorts-Id wurde kein Aufbewahrungsort gefunden.';
+ return 1;
+ }
+
+ my $ort = $ortsliste->[0];
+ $c->log->debug( get_output_string( $K, "Aufbewahrungsort aus Datenbank: ", $ort ) ) if $c->stash->{'debug_level'} >= 2;
+
+ my $anzahl_buecher = $c->model('Schema::Buecher')->count( { 'orts_id' => $orts_id, } );
+
+ if ( $anzahl_buecher ) {
+ $c->stash->{'template'} = 'error.tt2';
+ $c->stash->{'error'} = 'Dem übergebenen Aufbewahrungsort sind noch Bücher zugeordnet.';
+ return 1;
+ }
+
+ $c->stash->{'return_target'} = $c->session->{'return_target_ort_save'} or $c->web_path("/ort/list");
+
+ $c->stash->{'ort'} = $ort;
+ $ortsliste = undef;
+
+ $c->stash->{'template'} = 'ort/delete.tt2';
+ push @{$c->stash->{'cssfiles'}}, 'ort/view.css';
+
+ if ( $c->request->params->{'really_delete_ort'} and $c->request->params->{'really_delete_ort'} eq 'yes' and $c->request->params->{'do_delete'} ) {
+ eval {
+ delete_ort( $c, $orts_id );
+ };
+ if ( $@ ) {
+ $c->stash->{'error_message'} = $@;
+ $c->log->warn( "Fehler beim Löschen des Aufbewahrungsortes: " . $@ );
+ return undef;
+ }
+ $c->stash->{'template'} = 'ort/delete_success.tt2';
+ }
+
+}
+
+#-------------------------------------------------------
+
sub do_save_ort : Private {
my ( $self, $c ) = @_;
@ISA = qw(Exporter);
@EXPORT = qw(
+ &delete_ort
&get_ortsliste
&save_ort
);
#-----------------------------------------------------------------------------------
+=head2 delete_ort( $c, $orts_id )
+
+Loescht den Aufbewahrungsort mit der uebergebenen Orts-Id
+
+=cut
+
+sub delete_ort {
+
+ my $c = shift;
+ my $orts_id = shift;
+ my $K = ( caller(0) )[3] . "(): ";
+
+ $c->log->debug( $K . "aufgerufen fuer Orts-Id " . ( defined $orts_id ? $orts_id : '<undef>' ) . "." ) if $c->stash->{'debug_level'} > 2;
+
+ return undef unless $orts_id and to_int($orts_id);
+ $orts_id = to_int($orts_id);
+
+ my $schema = $c->model('Schema')->{'schema'};
+
+ # Raus, wenn der Aufbewahrungsort noch Buecher hat ...
+ if ( $c->model('Schema::Buecher')->count( { 'orts_id' => $orts_id, } ) ) {
+ my $msg = 'Es existieren noch Buecher dieses Aufbewahrungsortes.';
+ die $msg . "\n";
+ }
+
+ # Das eigentliche Löschen
+ my $coderef = sub {
+ $c->model('Schema::Orte')->search( { 'id' => $orts_id } )->delete();
+ };
+
+ my $rs;
+ eval {
+ $rs = $schema->txn_do($coderef);
+ };
+
+ if ($@) { # Transaction failed
+ my $msg = $@ =~ /Rollback failed/i ? "Rollback nicht erfolgreich!" : $@;
+ die $msg . "\n";
+ return undef;
+ }
+ return 1;
+
+}
+
+#-----------------------------------------------------------------------------------
+
=head1 AUTHOR
Frank Brehm
=head2 delete_verlag( $c, $verlags_id )
-Loescht den Autor mit der uebergebenen Autor-Id
+Loescht den Verlag mit der uebergebenen Verlags-Id
=cut
-%]
[%- BLOCK book_entry -%]
-[% book.title | html %][% IF book.autoren.size %] ([% book.autoren.join( ', ' ) | html %])[% END %]
+[% link_target = Catalyst.web_path( '/books/view', { 'return_target_form' => self_url, view_book_id => book.id, } ) -%]
+<a href="[% link_target %]">[% book.title | html %]</a>[% IF book.autoren.size %] ([% book.autoren.join( ', ' ) | html %])[% END %]
[%- END -%]
--- /dev/null
+<!-- [%#
+
+ Template zum Löschen eines Aufbewahrungsortes
+
+ vim: noai : ts=4 fenc=utf-8 filetype=html expandtab :
+
+ $Id$
+ $URL$
+
+ Übergebene Struktur in [ort]:
+
+ $ort = {
+ 'count_books' => '1',
+ 'descr' => '',
+ 'id' => '1',
+ 'name' => 'Ausgeliehen',
+ 'statisch' => 'y',
+ 'books' => [
+ {
+ 'id' => 8,
+ 'title' => 'Die Elfen',
+ 'title_original' => undef,
+ 'untertitel' => undef,
+ 'bindungsart_id' => 4,
+ 'bindungsart' => 'Softcover (Taschenbuch)',
+ 'verlags_id' => 7,
+ 'isbn' => '3-453-53001-2',
+ 'buch_nr' => undef,
+ 'ausgabejahr' => '2004',
+ 'druckjahr' => '2005',
+ 'seiten' => 912,
+ 'preis' => 14,
+ 'verlag_name' => 'Heyne',
+ 'verlag_name_long' => 'Heyne-Verlag usw. GmbH & Co. KG',
+ 'waehrungs_id' => 1,
+ 'waehrungs_kuerzel' => '€',
+ 'waehrungs_name' => 'Euro',
+ 'umrechnung_in_euro' => 1,
+ 'autoren' => [ 'Bernhard Hennen', 'James Sullivan' ],
+ 'autor_ids' => [ 10, 12 ],
+ },
+ {
+ ...
+ },
+ ],
+ };
+
+-%]
+
+Aufbewahrungsort löschen -->
+
+<form method="post" name="ort_form" action="[% self_url %]">
+<input type="hidden" name="really_delete_ort" value="yes" />
+<input type="hidden" name="delete_orts_id" value="[% ort.id | html %]" />
+
+<table class="ftable" cellspacing="0">
+ <tr>
+ <th colspan="2" class="title">Möchten Sie den Aufbewahrungsort '[% ort.name | html %]' wirklich löschen?</th>
+ </tr><tr>
+ <td colspan="2" class="empty"></td>
+ </tr><tr>
+ <th>Aufbewahrungsort:</th>
+ <td>[% ort.name | html %]</td>
+ </tr><tr>
+ <th>Beschreibung:</th>
+ <td>[%- ort.descr | html %]</td>
+ </tr><tr>
+ <td colspan="2" class="empty"></td>
+ </tr><tr>
+ <th colspan="2" class="button"><input type="submit" name="do_delete" value=" Löschen " /></th>
+</table>
+
+[%- IF error_message %]
+<div class="error">
+<span class="bold">Fehler:</span> [% error_message %]
+</div>
+[% END -%]
+
+<div class="back">
+<h2><a href="[% return_target %]">[% 'Zurück' %]</a></h2>
+</div>
+
--- /dev/null
+<!-- [%#
+
+ Template zum Melden des erfolgreichen Löschens eines Aufbewahrungsortes
+
+ vim: noai : ts=4 fenc=utf-8 filetype=html expandtab :
+
+ $Id$
+ $URL$
+
+ Übergebene Struktur in [ort]:
+
+ $ort = {
+ 'count_books' => '1',
+ 'descr' => '',
+ 'id' => '1',
+ 'name' => 'Ausgeliehen',
+ 'statisch' => 'y',
+ 'books' => [
+ {
+ 'id' => 8,
+ 'title' => 'Die Elfen',
+ 'title_original' => undef,
+ 'untertitel' => undef,
+ 'bindungsart_id' => 4,
+ 'bindungsart' => 'Softcover (Taschenbuch)',
+ 'verlags_id' => 7,
+ 'isbn' => '3-453-53001-2',
+ 'buch_nr' => undef,
+ 'ausgabejahr' => '2004',
+ 'druckjahr' => '2005',
+ 'seiten' => 912,
+ 'preis' => 14,
+ 'verlag_name' => 'Heyne',
+ 'verlag_name_long' => 'Heyne-Verlag usw. GmbH & Co. KG',
+ 'waehrungs_id' => 1,
+ 'waehrungs_kuerzel' => '€',
+ 'waehrungs_name' => 'Euro',
+ 'umrechnung_in_euro' => 1,
+ 'autoren' => [ 'Bernhard Hennen', 'James Sullivan' ],
+ 'autor_ids' => [ 10, 12 ],
+ },
+ {
+ ...
+ },
+ ],
+ };
+
+-%]
+
+Aufbewahrungsort wurde gelöscht -->
+
+<div style="text-align: center">
+
+Der Aufbewahrungsort <b>"[% ort.name | html %]"</b> wurde erfolgreich gelöscht.
+
+</div>
+
+<div class="back">
+<h2><a href="[% return_target %]">[% 'OK' %]</a></h2>
+</div>
+
--- /dev/null
+<!-- [%#
+ Template zum Ändern der Angaben eines Verlags
+
+ vim: noai : ts=4 fenc=utf-8 filetype=html expandtab :
+
+ $Id$
+ $URL$
+
+-%]
+[%- ort_form_title = 'Aufbewahrungsort ändern' %]
+[% ort_form_title %]
+-->
+[% PROCESS ort/form.tt2 %]
+
+<div class="back">
+<h2><a href="[% return_target_ort_save %]">[% 'Zurück' %]</a></h2>
+</div>
-[%#
+<!-- [%#
Template für Formular Aufbewahrungsorte
-%]
-<!-- Aufbewahrungsort-Formular -->
+Aufbewahrungsort-Formular -->
<form method="post" name="ort_form" action="[% self_url %]">
<input type="hidden" name="ort_form_sent" value="sent" />
-[%#
+<!-- [%#
Template für neuen Aufbewahrungsort
$URL$
-%]
-[%- serie_form_title = 'Neuer Aufbewahrungsort' -%]
+[%- ort_form_title = 'Neuer Aufbewahrungsort' -%]
+[% ort_form_title %]
+-->
[% PROCESS ort/form.tt2 %]
<div class="back">
-%]
[%- BLOCK book_entry -%]
-[% book.title | html %][% IF book.autoren.size %] ([% book.autoren.join( ', ' ) | html %])[% END %]
+[% link_target = Catalyst.web_path( '/books/view', { 'return_target_form' => self_url, view_book_id => book.id, } ) -%]
+<a href="[% link_target %]">[% book.title | html %]</a>[% IF book.autoren.size %] ([% book.autoren.join( ', ' ) | html %])[% END %]
[%- END -%]
-%]
[%- BLOCK book_entry -%]
-[% book.title | html %][% IF book.autoren.size %] ([% book.autoren.join( ', ' ) | html %])[% END %]
+[% link_target = Catalyst.web_path( '/books/view', { 'return_target_form' => self_url, view_book_id => book.id, } ) -%]
+<a href="[% link_target %]">[% book.title | html %]</a>[% IF book.autoren.size %] ([% book.autoren.join( ', ' ) | html %])[% END %]
[%- END -%]