From a54e00ececbcedce231a0cc55392780c9d86c2fa Mon Sep 17 00:00:00 2001 From: Frank Brehm Date: Tue, 3 Nov 2009 21:55:59 +0000 Subject: [PATCH] Mit Aufbewahrungsorten fertig geworden, Kleinkram --- lib/FrBr/Books/Controller/Ort.pm | 171 ++++++++++++++++++++++++++++++- lib/FrBr/Books/Util/Ort.pm | 47 +++++++++ lib/FrBr/Books/Util/Verlag.pm | 2 +- root/src/category/view.tt2 | 3 +- root/src/ort/delete.tt2 | 82 +++++++++++++++ root/src/ort/delete_success.tt2 | 61 +++++++++++ root/src/ort/edit.tt2 | 17 +++ root/src/ort/form.tt2 | 4 +- root/src/ort/new.tt2 | 6 +- root/src/ort/view.tt2 | 3 +- root/src/verlag/view.tt2 | 3 +- 11 files changed, 390 insertions(+), 9 deletions(-) create mode 100644 root/src/ort/delete.tt2 create mode 100644 root/src/ort/delete_success.tt2 create mode 100644 root/src/ort/edit.tt2 diff --git a/lib/FrBr/Books/Controller/Ort.pm b/lib/FrBr/Books/Controller/Ort.pm index 6fe4999..ff6d18d 100644 --- a/lib/FrBr/Books/Controller/Ort.pm +++ b/lib/FrBr/Books/Controller/Ort.pm @@ -232,7 +232,7 @@ sub form_new : Path('new') { } $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" @@ -260,6 +260,175 @@ sub form_new : Path('new') { #------------------------------------------------------- +=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 ) = @_; diff --git a/lib/FrBr/Books/Util/Ort.pm b/lib/FrBr/Books/Util/Ort.pm index fb3cb42..efa7779 100644 --- a/lib/FrBr/Books/Util/Ort.pm +++ b/lib/FrBr/Books/Util/Ort.pm @@ -22,6 +22,7 @@ BEGIN { @ISA = qw(Exporter); @EXPORT = qw( + &delete_ort &get_ortsliste &save_ort ); @@ -358,6 +359,52 @@ ENDE #----------------------------------------------------------------------------------- +=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 : '' ) . "." ) 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 diff --git a/lib/FrBr/Books/Util/Verlag.pm b/lib/FrBr/Books/Util/Verlag.pm index 388b728..504ea85 100644 --- a/lib/FrBr/Books/Util/Verlag.pm +++ b/lib/FrBr/Books/Util/Verlag.pm @@ -359,7 +359,7 @@ ENDE =head2 delete_verlag( $c, $verlags_id ) -Loescht den Autor mit der uebergebenen Autor-Id +Loescht den Verlag mit der uebergebenen Verlags-Id =cut diff --git a/root/src/category/view.tt2 b/root/src/category/view.tt2 index 04f50ff..9de4c94 100644 --- a/root/src/category/view.tt2 +++ b/root/src/category/view.tt2 @@ -54,7 +54,8 @@ -%] [%- 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, } ) -%] +[% book.title | html %][% IF book.autoren.size %] ([% book.autoren.join( ', ' ) | html %])[% END %] [%- END -%] diff --git a/root/src/ort/delete.tt2 b/root/src/ort/delete.tt2 new file mode 100644 index 0000000..286a10b --- /dev/null +++ b/root/src/ort/delete.tt2 @@ -0,0 +1,82 @@ + + +
+ + + + + + + + + + + + + + + + + + +
Möchten Sie den Aufbewahrungsort '[% ort.name | html %]' wirklich löschen?
Aufbewahrungsort:[% ort.name | html %]
Beschreibung:[%- ort.descr | html %]
+ +[%- IF error_message %] +
+Fehler: [% error_message %] +
+[% END -%] + + + diff --git a/root/src/ort/delete_success.tt2 b/root/src/ort/delete_success.tt2 new file mode 100644 index 0000000..7d13dbd --- /dev/null +++ b/root/src/ort/delete_success.tt2 @@ -0,0 +1,61 @@ + + +
+ +Der Aufbewahrungsort "[% ort.name | html %]" wurde erfolgreich gelöscht. + +
+ + + diff --git a/root/src/ort/edit.tt2 b/root/src/ort/edit.tt2 new file mode 100644 index 0000000..430e8bc --- /dev/null +++ b/root/src/ort/edit.tt2 @@ -0,0 +1,17 @@ + +[% PROCESS ort/form.tt2 %] + + diff --git a/root/src/ort/form.tt2 b/root/src/ort/form.tt2 index 6cd7384..7db0ffb 100644 --- a/root/src/ort/form.tt2 +++ b/root/src/ort/form.tt2 @@ -1,4 +1,4 @@ -[%# + +Aufbewahrungsort-Formular --> diff --git a/root/src/ort/new.tt2 b/root/src/ort/new.tt2 index be9f240..7173f98 100644 --- a/root/src/ort/new.tt2 +++ b/root/src/ort/new.tt2 @@ -1,4 +1,4 @@ -[%# + [% PROCESS ort/form.tt2 %]
diff --git a/root/src/ort/view.tt2 b/root/src/ort/view.tt2 index c126923..9ddf78f 100644 --- a/root/src/ort/view.tt2 +++ b/root/src/ort/view.tt2 @@ -47,7 +47,8 @@ -%] [%- 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, } ) -%] +[% book.title | html %][% IF book.autoren.size %] ([% book.autoren.join( ', ' ) | html %])[% END %] [%- END -%] diff --git a/root/src/verlag/view.tt2 b/root/src/verlag/view.tt2 index 3ad111a..6e69063 100644 --- a/root/src/verlag/view.tt2 +++ b/root/src/verlag/view.tt2 @@ -51,7 +51,8 @@ -%] [%- 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, } ) -%] +[% book.title | html %][% IF book.autoren.size %] ([% book.autoren.join( ', ' ) | html %])[% END %] [%- END -%] -- 2.39.5