]> Frank Brehm's Git Trees - books.git/commitdiff
Mit Aufbewahrungsorten fertig geworden, Kleinkram
authorFrank Brehm <frank@brehm-online.com>
Tue, 3 Nov 2009 21:55:59 +0000 (21:55 +0000)
committerFrank Brehm <frank@brehm-online.com>
Tue, 3 Nov 2009 21:55:59 +0000 (21:55 +0000)
lib/FrBr/Books/Controller/Ort.pm
lib/FrBr/Books/Util/Ort.pm
lib/FrBr/Books/Util/Verlag.pm
root/src/category/view.tt2
root/src/ort/delete.tt2 [new file with mode: 0644]
root/src/ort/delete_success.tt2 [new file with mode: 0644]
root/src/ort/edit.tt2 [new file with mode: 0644]
root/src/ort/form.tt2
root/src/ort/new.tt2
root/src/ort/view.tt2
root/src/verlag/view.tt2

index 6fe4999b936a0bbd91eb7a7d690a97fbb8d7271f..ff6d18d04622cf8f3c094afc12019f5aa73e4463 100644 (file)
@@ -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' => "&Auml;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&uuml;ltige Aufbewahrungsorts-Id &uuml;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 &uuml;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&uuml;ltige Aufbewahrungsort
+s-Id &uuml;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 &uuml;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 &uuml;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 ) = @_;
index fb3cb4243e6bd59320a5747e00dc94f6739fcecc..efa777969dec9f9779fdf23dbd5e4af9e951e8ea 100644 (file)
@@ -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 : '<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
index 388b728da6909ac12c407ca09a080b869330e089..504ea85268ae9d9fb3a63aeac582f3b4284c0527 100644 (file)
@@ -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
 
index 04f50ff365dee223ae90f351224e44660f2b5a8c..9de4c94a45eeb8920af082d312e2741f9e01f362 100644 (file)
@@ -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, } ) -%]
+<a href="[% link_target %]">[% book.title | html %]</a>[% 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 (file)
index 0000000..286a10b
--- /dev/null
@@ -0,0 +1,82 @@
+<!-- [%# 
+
+    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>&nbsp;[% error_message %]
+</div>
+[% END -%]
+
+<div class="back">
+<h2><a href="[% return_target %]">[% 'Zurück' %]</a></h2>
+</div>
+
diff --git a/root/src/ort/delete_success.tt2 b/root/src/ort/delete_success.tt2
new file mode 100644 (file)
index 0000000..7d13dbd
--- /dev/null
@@ -0,0 +1,61 @@
+<!-- [%# 
+
+    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>&quot;[% ort.name | html %]&quot;</b> wurde erfolgreich gelöscht.
+
+</div>
+
+<div class="back">
+<h2><a href="[% return_target %]">[% 'OK' %]</a></h2>
+</div>
+
diff --git a/root/src/ort/edit.tt2 b/root/src/ort/edit.tt2
new file mode 100644 (file)
index 0000000..430e8bc
--- /dev/null
@@ -0,0 +1,17 @@
+<!-- [%#
+    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>
index 6cd73840e6455787cb62a8b25d0100c1500e3cae..7db0ffb0c2709a5a6694f551aeb7657bcb6b7f29 100644 (file)
@@ -1,4 +1,4 @@
-[%#
+<!-- [%#
 
     Template für Formular Aufbewahrungsorte
 
@@ -9,7 +9,7 @@
 
 -%]
 
-<!-- Aufbewahrungsort-Formular -->
+Aufbewahrungsort-Formular -->
 
 <form method="post" name="ort_form" action="[% self_url %]">
 <input type="hidden" name="ort_form_sent" value="sent" />
index be9f240c7026eb8ff1768a1342b580e6d3c7891d..7173f9814c3d4ace6bddbf6c0d51aad20c6f4d17 100644 (file)
@@ -1,4 +1,4 @@
-[%#
+<!-- [%#
 
     Template für neuen Aufbewahrungsort
 
@@ -8,7 +8,9 @@
     $URL$
 
 -%]
-[%- serie_form_title = 'Neuer Aufbewahrungsort' -%]
+[%- ort_form_title = 'Neuer Aufbewahrungsort' -%]
+[% ort_form_title %]
+-->
 [% PROCESS ort/form.tt2 %]
 
 <div class="back">
index c12692358ba47256ca38dfa9adac58d1e8224ad9..9ddf78f9d2095eee23c54976ecdc272ae7c5ff36 100644 (file)
@@ -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, } ) -%]
+<a href="[% link_target %]">[% book.title | html %]</a>[% IF book.autoren.size %] ([% book.autoren.join( ', ' ) | html %])[% END %]
 [%- END -%]
 
 
index 3ad111a70540f3d622455ff25a9c3242c39d7e76..6e69063d3246b19b3e222858577ddd496942a0a7 100644 (file)
@@ -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, } ) -%]
+<a href="[% link_target %]">[% book.title | html %]</a>[% IF book.autoren.size %] ([% book.autoren.join( ', ' ) | html %])[% END %]
 [%- END -%]