]> Frank Brehm's Git Trees - books.git/commitdiff
Umbau auf Transaktionen
authorFrank Brehm <frank@brehm-online.com>
Thu, 25 Feb 2010 21:49:56 +0000 (21:49 +0000)
committerFrank Brehm <frank@brehm-online.com>
Thu, 25 Feb 2010 21:49:56 +0000 (21:49 +0000)
db/changes-00.sql [new file with mode: 0644]
lib/FrBr/Books/Controller/Root.pm
lib/FrBr/Books/Db/Result/Autoren.pm
lib/FrBr/Books/Db/Result/Buecher.pm
lib/FrBr/Books/Db/Result/Users.pm
lib/FrBr/Books/Plugin/Author.pm
lib/FrBr/Books/Plugin/Book.pm
root/src/autor/view.tt2

diff --git a/db/changes-00.sql b/db/changes-00.sql
new file mode 100644 (file)
index 0000000..6b3fc72
--- /dev/null
@@ -0,0 +1,68 @@
+--
+-- Änderungen an der Datenstruktur
+--
+
+--
+-- $Id$
+-- $URL$
+--
+
+-- ----------------------------------------------------------------------------------
+-- Tabelle `autoren` aufmotzen.
+
+ALTER TABLE `autoren`
+  ADD `created_at` datetime,
+  ADD `created_by` int(10) unsigned,
+  ADD `changed_at` datetime,
+  ADD `changed_by` int(10) unsigned,
+  ADD KEY `created_by` (`created_by`),
+  ADD KEY `changed_by` (`changed_by`),
+  ADD CONSTRAINT `autoren_ibfk_1` FOREIGN KEY (`created_by`) REFERENCES `users` (`user_id`),
+  ADD CONSTRAINT `autoren_ibfk_2` FOREIGN KEY (`changed_by`) REFERENCES `users` (`user_id`);
+
+UPDATE `autoren` SET
+  `created_at` = NOW(),
+  `created_by` = 1,
+  `changed_at` = NOW(),
+  `changed_by` = 1;
+
+COMMIT;
+
+ALTER TABLE `autoren`
+  MODIFY `created_at` datetime         NOT NULL COMMENT 'Wann erstellt',
+  MODIFY `created_by` int(10) unsigned NOT NULL COMMENT 'Von welcher User-Id erstellt',
+  MODIFY `changed_at` datetime         NOT NULL COMMENT 'Wann geändert',
+  MODIFY `changed_by` int(10) unsigned NOT NULL COMMENT 'Von welcher User-Id geändert';
+
+-- ----------------------------------------------------------------------------------
+-- Tabelle `buecher` aufmotzen.
+
+
+ALTER TABLE `buecher`
+  ADD `notes`      text                         COMMENT 'Anmerkungen',
+  ADD `created_at` datetime,
+  ADD `created_by` int(10) unsigned,
+  ADD `changed_at` datetime,
+  ADD `changed_by` int(10) unsigned,
+  ADD KEY `created_by` (`created_by`),
+  ADD KEY `changed_by` (`changed_by`),
+  ADD CONSTRAINT `buecher_ibfk_5` FOREIGN KEY (`created_by`) REFERENCES `users` (`user_id`),
+  ADD CONSTRAINT `buecher_ibfk_6` FOREIGN KEY (`changed_by`) REFERENCES `users` (`user_id`);
+
+UPDATE `buecher` SET
+  `created_at` = NOW(),
+  `created_by` = 1,
+  `changed_at` = NOW(),
+  `changed_by` = 1;
+
+COMMIT;
+
+ALTER TABLE `buecher`
+  MODIFY `created_at` datetime         NOT NULL COMMENT 'Wann erstellt',
+  MODIFY `created_by` int(10) unsigned NOT NULL COMMENT 'Von welcher User-Id erstellt',
+  MODIFY `changed_at` datetime         NOT NULL COMMENT 'Wann geändert',
+  MODIFY `changed_by` int(10) unsigned NOT NULL COMMENT 'Von welcher User-Id geändert';
+
+-- ----------------------------------------------------------------------------------
+
+-- vim: noai : ts=4 fenc=utf-8 filetype=sql expandtab :
index 731747becfc72f47c7187290f6883483fce3d6e9..820c1b4bf454a858b5cbd3b40f1b551ff1123701 100644 (file)
@@ -205,7 +205,7 @@ sub auto : Private {
     $c->stash->{'last_login_name'} = $c->session->{'last_login_name'};
 
     $c->log->debug( $K . "Aktuelle Script-URL: '" . $c->stash->{'self_url'} . "'." ) if $c->stash->{'debug_level'} >= 2;
-    $c->log->debug( get_output_string( $K, "Aktueller Request: ", $c->req ) )  if $c->config->{'debug_level'} >= 3;
+#    $c->log->debug( get_output_string( $K, "Aktueller Request: ", $c->req ) )  if $c->config->{'debug_level'} >= 3;
 
     # Listenlaenge festlegen
     $c->stash->{'list_length'} = $c->session->{'list_length'} || $c->config->{'default_list_length'} || 20;
index 682f7f6a166119920f16e310bb422c6f9e87d619..f740d79cabafdf9d7283335a27ff97c68117f7db 100644 (file)
@@ -11,18 +11,26 @@ use base 'DBIx::Class';
 __PACKAGE__->load_components("Core");
 __PACKAGE__->table("autoren");
 __PACKAGE__->add_columns(
-  "id"          => { data_type => "INT",     default_value => undef, is_nullable => 0, size => 10 },
-  "titel"       => { data_type => "VARCHAR", default_value => undef, is_nullable => 1, size => 100, },
-  "vorname"     => { data_type => "VARCHAR", default_value => undef, is_nullable => 1, size => 150, },
-  "mittelname"  => { data_type => "VARCHAR", default_value => undef, is_nullable => 1, size => 150, },
-  "nachname"    => { data_type => "VARCHAR", default_value => undef, is_nullable => 0, size => 150, },
-  "name_suffix" => { data_type => "VARCHAR", default_value => undef, is_nullable => 1, size => 100, },
-  "autor_descr" => { data_type => "TEXT",    default_value => undef, is_nullable => 0, size => 65535, },
-  "about"       => { data_type => "TEXT",    default_value => undef, is_nullable => 0, size => 65535, },
+  "id"          => { data_type => "INT",      default_value => undef, is_nullable => 0, size => 10 },
+  "titel"       => { data_type => "VARCHAR",  default_value => undef, is_nullable => 1, size => 100, },
+  "vorname"     => { data_type => "VARCHAR",  default_value => undef, is_nullable => 1, size => 150, },
+  "mittelname"  => { data_type => "VARCHAR",  default_value => undef, is_nullable => 1, size => 150, },
+  "nachname"    => { data_type => "VARCHAR",  default_value => undef, is_nullable => 0, size => 150, },
+  "name_suffix" => { data_type => "VARCHAR",  default_value => undef, is_nullable => 1, size => 100, },
+  "autor_descr" => { data_type => "TEXT",     default_value => undef, is_nullable => 0, size => 65535, },
+  "about"       => { data_type => "TEXT",     default_value => undef, is_nullable => 0, size => 65535, },
+  "created_at"  => { data_type => "DATETIME", default_value => undef, is_nullable => 0, size => 19, },
+  "created_by"  => { data_type => "INT",      default_value => undef, is_nullable => 0, size => 10 },
+  "changed_at"  => { data_type => "DATETIME", default_value => undef, is_nullable => 0, size => 19, },
+  "changed_by"  => { data_type => "INT",      default_value => undef, is_nullable => 0, size => 10 },
+
 );
 __PACKAGE__->set_primary_key("id");
 __PACKAGE__->add_unique_constraint( "name", [ "nachname", "vorname", "mittelname", "name_suffix" ] );
 
+__PACKAGE__->belongs_to( "created_by", "FrBr::Books::Db::Result::Users", { 'foreign.user_id' => "self.created_by" },);
+__PACKAGE__->belongs_to( "changed_by", "FrBr::Books::Db::Result::Users", { 'foreign.user_id' => "self.changed_by" },);
+
 __PACKAGE__->has_many( 'autor_buch' => 'FrBr::Books::Db::Result::Autor2Buch', { 'foreign.autor_id' => 'self.id' } );
 __PACKAGE__->many_to_many( 'buecher' => 'autor_buch', 'buch' );
 
index fd404b69c14295c4ec9784d81f773ec6ca5cb99b..14e594f3df029edfbabc8d456354704222d1644f 100644 (file)
@@ -26,6 +26,11 @@ __PACKAGE__->add_columns(
   "preis"          => { data_type => "FLOAT",     default_value => undef, is_nullable => 1, size => 32 },
   "waehrungs_id"   => { data_type => "INT",       default_value => undef, is_nullable => 1, size => 10 },
   "kurzinhalt"     => { data_type => "TEXT",      default_value => undef, is_nullable => 1, size => 65535, },
+  "notes"          => { data_type => "TEXT",      default_value => undef, is_nullable => 1, size => 65535, },
+  "created_at"     => { data_type => "DATETIME",  default_value => undef, is_nullable => 0, size => 19, },
+  "created_by"     => { data_type => "INT",       default_value => undef, is_nullable => 0, size => 10 },
+  "changed_at"     => { data_type => "DATETIME",  default_value => undef, is_nullable => 0, size => 19, },
+  "changed_by"     => { data_type => "INT",       default_value => undef, is_nullable => 0, size => 10 },
 );
 
 __PACKAGE__->set_primary_key("id");
@@ -44,6 +49,9 @@ __PACKAGE__->many_to_many( 'kategorien' => 'buch_kategorie', 'kategorie' );
 __PACKAGE__->has_many( 'buch_serie' => 'FrBr::Books::Db::Result::Buch2serie', { 'foreign.buch_id' => 'self.id' } );
 __PACKAGE__->many_to_many( 'serien' => 'buch_serie', 'serie' );
 
+__PACKAGE__->belongs_to( "created_by", "FrBr::Books::Db::Result::Users", { 'foreign.user_id' => "self.created_by" },);
+__PACKAGE__->belongs_to( "changed_by", "FrBr::Books::Db::Result::Users", { 'foreign.user_id' => "self.changed_by" },);
+
 =pod
 
 # Make a new ResultSource based on the buecher class
index d2375cb454c8cd240a59b5d0dd0cfa8f7e0c405c..69588a3a4817bffcf8440bff2bf374117dda46dc 100644 (file)
@@ -30,6 +30,11 @@ __PACKAGE__->add_unique_constraint("login", ["login"]);
 # Created by DBIx::Class::Schema::Loader v0.04004 @ 2008-03-17 17:53:52
 # DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:dE3Et+cb9hDWcDvAu7CS+A
 
+__PACKAGE__->has_many( "autoren_created", "FrBr::Books::Db::Result::Autoren", { "foreign.created_by" => "self.user_id" },);
+__PACKAGE__->has_many( "autoren_changed", "FrBr::Books::Db::Result::Autoren", { "foreign.changed_by" => "self.user_id" },);
+__PACKAGE__->has_many( "buecher_created", "FrBr::Books::Db::Result::Buecher", { "foreign.created_by" => "self.user_id" },);
+__PACKAGE__->has_many( "buecher_changed", "FrBr::Books::Db::Result::Buecher", { "foreign.changed_by" => "self.user_id" },);
+
 
 # You can replace this text with custom content, and it will be preserved on regeneration
 1;
index 6df42eb8a415f22d25cc85aeb74b2e85b9f27d16..dda732f8c87eefeb272734343bca71f9fda17ff0 100644 (file)
@@ -57,15 +57,21 @@ Die zurueckgegebene Array-Ref hat folgenden Aufbau:
 
        $res = [
                {
-                       'id'          => 1,
-                       'name'        => 'J.R.R. Tolkien',
-                       'titel'       => undef,
-                       'vorname'     => 'J.R.R.',
-                       'mittelname'  => undef,
-                       'nachname'    => 'Tolkien',
-                       'name_suffix' => undef,
-                       'descr'       => 'Bla Blub',
-                       'about'       => 'Der Autor wurde ...',
+                       'id'              => 1,
+                       'name'            => 'J.R.R. Tolkien',
+                       'titel'           => undef,
+                       'vorname'         => 'J.R.R.',
+                       'mittelname'      => undef,
+                       'nachname'        => 'Tolkien',
+                       'name_suffix'     => undef,
+                       'descr'           => 'Bla Blub',
+                       'about'           => 'Der Autor wurde ...',
+            'created_at'      => '2010-02-22 12:13:14',
+            'id_created_by'   => 1,
+            'name_created_by' => 'Frank Brehm',
+            'changed_at'      => '2010-02-29 13:14:15',
+            'id_changed_by'   => 2,
+            'name_changed_by' => 'Doris Hennig',
                        'books'       => [
                                {
                                        'id'             => 22,
@@ -129,16 +135,28 @@ sub b_get_author_list {
     $c->log->debug(  get_output_string( $K, "Anzahl gefundene Autoren: ", $anzahl_autoren ) ) if $c->stash->{'debug_level'} >= 2;
 
     my $other_params = {};
-    $other_params->{'order_by'} = [ 'nachname', 'vorname', 'mittelname', 'name_suffix' ];
+    $other_params->{'order_by'} = [ 'me.nachname', 'me.vorname', 'me.mittelname', 'me.name_suffix' ];
+    $other_params->{'join'} = [
+        'created_by',
+        'changed_by',
+    ];
     $other_params->{'select'} = [
-        'id',
-        'titel',
-        'vorname',
-        'mittelname',
-        'nachname',
-        'name_suffix',
-        'autor_descr',
-               'about',
+        'me.id',
+        'me.titel',
+        'me.vorname',
+        'me.mittelname',
+        'me.nachname',
+        'me.name_suffix',
+        'me.autor_descr',
+               'me.about',
+        'me.created_by',
+        'created_by.vorname',
+        'created_by.nachname',
+        'me.created_at',
+        'me.changed_by',
+        'changed_by.vorname',
+        'changed_by.nachname',
+        'me.changed_at',
     ];
     $other_params->{'as'} = [
         'id',
@@ -149,6 +167,14 @@ sub b_get_author_list {
         'name_suffix',
         'autor_descr',
                'about',
+        'created_by',
+        'created_by_vorname',
+        'created_by_nachname',
+        'created_at',
+        'changed_by',
+        'changed_by_vorname',
+        'changed_by_nachname',
+        'changed_at',
     ];
  
        if ( $page ) {
@@ -157,6 +183,7 @@ sub b_get_author_list {
        }
  
        for my $autor_rs ( $c->model('Schema::Autoren')->search( $search_params, $other_params )->all() ) {
+        my $vorname = '';
                my $autor = {};
                $autor->{'id'}          = $autor_rs->id();
                $autor->{'titel'}       = $autor_rs->titel();
@@ -166,6 +193,19 @@ sub b_get_author_list {
                $autor->{'name_suffix'} = $autor_rs->name_suffix();
                $autor->{'descr'}       = $autor_rs->autor_descr();
                $autor->{'about'}       = $autor_rs->about();
+
+        $autor->{'id_created_by'}   = $autor_rs->get_column('created_by');
+        $autor->{'created_at'}      = $autor_rs->get_column('created_at');
+        $autor->{'name_created_by'} = $autor_rs->get_column('created_by_nachname');
+        $vorname                    = $autor_rs->get_column('created_by_vorname');
+        $autor->{'name_created_by'} = $vorname . ' ' . $autor->{'name_created_by'} if $vorname;
+
+        $autor->{'id_changed_by'}   = $autor_rs->get_column('changed_by');
+        $autor->{'changed_at'}      = $autor_rs->get_column('changed_at');
+        $autor->{'name_changed_by'} = $autor_rs->get_column('changed_by_nachname');
+        $vorname                    = $autor_rs->get_column('changed_by_vorname');
+        $autor->{'name_changed_by'} = $vorname . ' ' . $autor->{'name_changed_by'} if $vorname;
+
                $autor->{'books'}       = [];
                my @N;
                push @N, $autor->{'titel'} if $autor->{'titel'};
@@ -240,6 +280,7 @@ sub b_save_autor {
 
        $c->log->debug( $K . "aufgerufen." ) if $c->stash->{'debug_level'} > 2;
 
+    my $schema =  $c->model('Schema')->{'schema'};
     my $storage = $c->model('Schema')->storage;
        $c->stash->{'save_autor_result'} = '';
 
@@ -293,14 +334,19 @@ sub b_save_autor {
        $row->{'about'} = $tmp eq '' ? undef : $tmp;
 
        my $saved_aid = $c->b_get_autor_id( $search_params );
-       
-    # Zuerst einmal Test im nichgelocktem Zustand ...
+
+    my $user_id = $c->stash->{'current_user_id'} || 1;
+    $row->{'changed_at'} = \'NOW()';
+    $row->{'changed_by'} = $user_id;
+
+    # Zuerst einmal Test außerhalb der Transaktion ...
     if ( $autor->{'id'} ) {
         if ( $saved_aid and ( $saved_aid != $autor->{'id'} ) ) {
             $c->stash->{'save_autor_result'} = 'Es existiert bereits ein Autor mit den übergebenen Angaben.';
             $c->log->info( $K . "Es existiert bereits ein Autor mit den übergebenen Angaben." );
             return undef;
         }
+        $row->{'id'} = $autor->{'id'};
     }
     else {
         if ( $saved_aid ) {
@@ -310,6 +356,61 @@ sub b_save_autor {
         }
     }
 
+    $c->log->debug( get_output_string( $K, "Zu speichernder Autor: ", $row ) ) if $c->stash->{'debug_level'} >= 3;
+    my $id = undef;
+
+    # Der Transaktionscode ...
+    my $txn_code = sub {
+
+        my $key_hash = {};
+        $key_hash->{'key'} = $row->{'id'} ? 'primary' : 'name';
+
+        my $rs = $c->model('Schema::Autoren')->update_or_new( $row, $key_hash );
+
+        if ( $rs->in_storage() ) {
+
+            $c->log->debug( $K . "Den Autor gibt es schon ..." );
+
+            my $spalten = {};
+            %$spalten = $rs->get_columns();
+            $c->log->debug( get_output_string( $K, "Die Spalten des Autors: ", $spalten ) );
+            $spalten = {};
+
+            $rs->set_column( 'id' => \'LAST_INSERT_ID(`id`)' );
+            %$spalten = $rs->get_columns();
+            $c->log->debug( get_output_string( $K, "Die Spalten des Autors nochmal: ", $spalten ) );
+            $spalten = {};
+
+            $rs->update();
+
+        }
+        else {
+            $rs->set_column( 'created_by' => $user_id );
+            $rs->set_column( 'created_at' => \'NOW()' );
+            $rs->insert();
+        }
+
+        $id = $storage->last_insert_id();
+
+    };
+
+    # Und ab ...
+    eval {
+        $schema->txn_do($txn_code);
+    };
+
+    if ($@) {                             # Transaction failed
+        my $msg = $@ =~ /Rollback failed/i ? "Rollback nicht erfolgreich!" : $@;
+        $c->stash->{'save_autor_result'} = $msg;
+        die $msg . "\n";
+        return undef;
+    }
+
+    $c->stash->{'save_autor_result'} = 'OK';
+    return $id;
+
+=pod
+
     # Sperren der Autoren-Tabelle
     $c->lock_tables( 'write' => [ 'autoren', 'autoren', 'as', 'me' ] );
 
@@ -363,6 +464,8 @@ sub b_save_autor {
     $c->stash->{'save_autor_result'} = 'OK';
     return $new_id;
 
+=cut
+
 }
 
 #-----------------------------------------------------------------------------------
@@ -452,13 +555,9 @@ sub b_delete_autor {
 
     my $schema =  $c->model('Schema')->{'schema'};
 
-#      # Sperren der Autoren- und der Buecher-Tabelle
-#      $c->lock_tables( 'write' => [ 'autoren', 'autoren', 'as', 'me', ], 'read' => [ 'autor2buch', 'autor2buch', 'as', 'me', ] );
-
        # Raus, wenn der Autor noch Buecher hat ...
        if ( $c->model('Schema::Autor2buch')->count( { 'autor_id' => $autor_id, } ) ) {
                my $msg = 'Es existieren noch Buecher dieses Autors.';
-#              $c->unlock_tables();
                die $msg . "\n";
        }
 
@@ -474,11 +573,9 @@ sub b_delete_autor {
 
     if ($@) {                             # Transaction failed
                my $msg = $@ =~ /Rollback failed/i ? "Rollback nicht erfolgreich!" : $@;
-#              $c->unlock_tables();
                die $msg . "\n";
                return undef;
     }
-#    $c->unlock_tables();
        return 1;
 
 }
index b910d941c56ec0bc21dd5a1b53237e2abd9d4d75..99fd03fc2da6662bbd863ca09d57e67a4b34e72b 100644 (file)
@@ -71,44 +71,51 @@ Rueckgabe: Eine Array-Ref mit allen Buchtiteln, die den uebergebenen Suchkriteri
 
   $list = [
     {
-    'ausgabejahr' => '2003',
-    'autor_ids' => [
+    'ausgabejahr'        => '2003',
+    'autor_ids'          => [
       '5'
     ],
-    'autoren' => [
+    'autoren'            => [
       'Bill Napier'
     ],
-    'bindungsart' => 'Softcover (Taschenbuch)',
-    'bindungsart_id' => '4',
-    'buch_nr' => '093314',
-    'druckjahr' => '2007',
-    'id' => '5',
-    'isbn' => undef,
-    'kategorie_ids' => [
+    'bindungsart'        => 'Softcover (Taschenbuch)',
+    'bindungsart_id'     => '4',
+    'buch_nr'            => '093314',
+    'druckjahr'          => '2007',
+    'id'                 => '5',
+    'isbn'               => undef,
+    'kategorie_ids'      => [
       '4'
     ],
-    'kategorien' => [
+    'kategorien'         => [
       'Mystery-Thriller'
     ],
-    'kurzinhalt' => 'Bla bla bla, tolles Buch',
-    'ort_beschreibung' => undef,
-    'ort_ist_statisch' => undef,
-    'orts_id' => undef,
-    'ortsname' => undef,
-    'preis' => '7.45',
-    'seiten' => '416',
-    'serien' => [],
-    'serien_ids' => [],
-    'title' => 'Der 77. Grad',
-    'title_original' => 'Shattered Icon',
+    'kurzinhalt'         => 'Bla bla bla, tolles Buch',
+    'notes'              => 'naja, geht so',
+    'ort_beschreibung'   => undef,
+    'ort_ist_statisch'   => undef,
+    'orts_id'            => undef,
+    'ortsname'           => undef,
+    'preis'              => '7.45',
+    'seiten'             => '416',
+    'serien'             => [],
+    'serien_ids'         => [],
+    'title'              => 'Der 77. Grad',
+    'title_original'     => 'Shattered Icon',
     'umrechnung_in_euro' => '1',
-    'untertitel' => undef,
-    'verlags_id' => '3',
-    'verlagsname_long' => 'Bertelsmann Club GmbH - Taschenbuch',
-    'verlagsname_short' => 'Club Taschenbuch',
-    'waehrungs_id' => '1',
-    'waehrungs_kuerzel' => '€',
-    'waehrungs_name' => 'Euro'
+    'untertitel'         => undef,
+    'verlags_id'         => '3',
+    'verlagsname_long'   => 'Bertelsmann Club GmbH - Taschenbuch',
+    'verlagsname_short'  => 'Club Taschenbuch',
+    'waehrungs_id'       => '1',
+    'waehrungs_kuerzel'  => '€',
+    'waehrungs_name'     => 'Euro'
+    'created_at'         => '2010-02-22 12:13:14',
+    'id_created_by'      => 1,
+    'name_created_by'    => 'Frank Brehm',
+    'changed_at'         => '2010-02-29 13:14:15',
+    'id_changed_by'      => 2,
+    'name_changed_by'    => 'Doris Hennig',
   },
   ...
   ];
@@ -320,7 +327,14 @@ sub b_get_booklist {
     $b_search_params = { 'me.id' => \$in };
 
     $other_params = {};
-    $other_params->{'join'}     = [ 'waehrung', 'verlag', 'ort', 'bindungsart' ];
+    $other_params->{'join'}     = [
+        'waehrung',
+        'verlag',
+        'ort',
+        'bindungsart',
+        'created_by',
+        'changed_by',
+    ];
     $other_params->{'select'} = [
         'me.id',
         'me.title',
@@ -336,6 +350,7 @@ sub b_get_booklist {
         'me.druckjahr',
         'me.seiten',
         'me.kurzinhalt',
+        'me.notes',
         'me.preis',
         'me.waehrungs_id',
         'waehrung.waehrungs_kuerzel',
@@ -346,6 +361,14 @@ sub b_get_booklist {
         'ort.name',
         'ort.descr',
         'ort.statisch',
+        'me.created_by',
+        'created_by.vorname',
+        'created_by.nachname',
+        'me.created_at',
+        'me.changed_by',
+        'changed_by.vorname',
+        'changed_by.nachname',
+        'me.changed_at',
     ];
     $other_params->{'as'} = [
         'id',
@@ -362,6 +385,7 @@ sub b_get_booklist {
         'druckjahr',
         'seiten',
         'kurzinhalt',
+        'notes',
         'preis',
         'waehrungs_id',
         'waehrungs_kuerzel',
@@ -372,11 +396,20 @@ sub b_get_booklist {
         'ortsname',
         'ort_beschreibung',
         'ort_ist_statisch',
+        'created_by',
+        'created_by_vorname',
+        'created_by_nachname',
+        'created_at',
+        'changed_by',
+        'changed_by_vorname',
+        'changed_by_nachname',
+        'changed_at',
     ];
  
     my $buchmap = {};
     for my $book ( $c->model('Schema::Buecher')->search( $b_search_params, $other_params )->all() ) {
         my $buch = {};
+        my $vorname = '';
         my $id                        = $book->id();
         $buch->{'id'}                 = $id;
         $buch->{'title'}              = $book->title();
@@ -392,6 +425,7 @@ sub b_get_booklist {
         $buch->{'druckjahr'}          = $book->druckjahr();
         $buch->{'seiten'}             = $book->seiten();
         $buch->{'kurzinhalt'}         = $book->kurzinhalt();
+        $buch->{'notes'}              = $book->notes();
         $buch->{'preis'}              = $book->preis();
         $buch->{'waehrungs_id'}       = $book->waehrungs_id();
         $buch->{'waehrungs_kuerzel'}  = $book->get_column('waehrungs_kuerzel');
@@ -402,12 +436,26 @@ sub b_get_booklist {
         $buch->{'ortsname'}           = $book->get_column('ortsname');
         $buch->{'ort_beschreibung'}   = $book->get_column('ort_beschreibung');
         $buch->{'ort_ist_statisch'}   = $book->get_column('ort_ist_statisch');
-        $buch->{'autoren'}            = [];
-        $buch->{'autor_ids'}          = [];
-        $buch->{'kategorien'}         = [];
-        $buch->{'kategorie_ids'}      = [];
-        $buch->{'serien'}             = [];
-        $buch->{'serien_ids'}         = [];
+
+        $buch->{'id_created_by'}   = $book->get_column('created_by');
+        $buch->{'created_at'}      = $book->get_column('created_at');
+        $buch->{'name_created_by'} = $book->get_column('created_by_nachname');
+        $vorname                   = $book->get_column('created_by_vorname');
+        $buch->{'name_created_by'} = $vorname . ' ' . $buch->{'name_created_by'} if $vorname;
+
+        $buch->{'id_changed_by'}   = $book->get_column('changed_by');
+        $buch->{'changed_at'}      = $book->get_column('changed_at');
+        $buch->{'name_changed_by'} = $book->get_column('changed_by_nachname');
+        $vorname                   = $book->get_column('changed_by_vorname');
+        $buch->{'name_changed_by'} = $vorname . ' ' . $buch->{'name_changed_by'} if $vorname;
+
+        $buch->{'autoren'}       = [];
+        $buch->{'autor_ids'}     = [];
+        $buch->{'kategorien'}    = [];
+        $buch->{'kategorie_ids'} = [];
+        $buch->{'serien'}        = [];
+        $buch->{'serien_ids'}    = [];
+
         $buchmap->{$id} = $buch;
     }
 
@@ -690,29 +738,30 @@ sub b_delete_book {
 =head2 $c->b_save_book( $book )
 
   $book = {
-    'ausgabejahr' => '2004',
-    'autoren' => [
+    'ausgabejahr'    => '2004',
+    'autoren'        => [
       '11'
     ],
     'bindungsart_id' => 4,
-    'book_nr' => '',
-    'druckjahr' => '2006',
-    'isbn' => '3-492-70076-4',
-    'kategorien' => [
+    'book_nr'        => '',
+    'druckjahr'      => '2006',
+    'isbn'           => '3-492-70076-4',
+    'kategorien'     => [
       '2'
     ],
-    'kurzinhalt' => 'bla bla bla',
+    'kurzinhalt'     => 'bla bla bla',
+    'notes'          => 'geht so ...',
     'original_title' => '',
-    'orts_id' => '2',
-    'preis' => 14,
-    'seiten' => '640',
-    'serien' => [
+    'orts_id'        => '2',
+    'preis'          => 14,
+    'seiten'         => '640',
+    'serien'         => [
       '4'
     ],
-    'title' => 'Die Zwerge',
-    'untertitel' => '',
-    'verlags_id' => '8',
-    'waehrungs_id' => '1'
+    'title'          => 'Die Zwerge',
+    'untertitel'     => '',
+    'verlags_id'     => '8',
+    'waehrungs_id'   => '1'
   };
 
 =cut
@@ -725,6 +774,7 @@ sub b_save_book {
 
     $c->log->debug( $K . "aufgerufen." ) if $c->stash->{'debug_level'} > 2;
 
+    my $schema =  $c->model('Schema')->{'schema'};
     my $storage = $c->model('Schema')->storage;
 
     my $tmp = $book->{'kurzinhalt'};
@@ -733,6 +783,12 @@ sub b_save_book {
     $tmp =~ s/\s+$//;
        $book->{'kurzinhalt'} = $tmp eq '' ? undef : $tmp;
 
+    $tmp = $book->{'notes'};
+    $tmp = '' unless defined $tmp;
+    $tmp =~ s/^\s+//;
+    $tmp =~ s/\s+$//;
+       $book->{'notes'} = $tmp eq '' ? undef : $tmp;
+
     my $save_func = sub {
 
         my $storage = shift;
index 323d0df7a2fca9b04afc565d800e8871d509da9d..9fc963d941ec88fe42a3e8deb9589bcbd15308ed 100644 (file)
@@ -50,7 +50,7 @@ Autorenanzeige -->
     <td colspan="2" class="empty"></td>
   </tr><tr>
     <th>Titel des Autors :</th>
-    <td>[% autor.title | html %]</td>
+    <td>[% autor.titel | html %]</td>
   </tr><tr>
     <th>Vorname:</th>
     <td>[% autor.vorname | html %]</td>