Session::State::Cookie
+FrBr::Books::Plugin::Ort
+ +FrBr::Books::Plugin::Verlag
+FrBr::Books::Plugin::Waehrung
/;
use FrBr::Books::Util::Bindungsart;
use FrBr::Books::Util::Category;
use FrBr::Books::Util::Serie;
-#use FrBr::Books::Util::Ort;
-use FrBr::Books::Util::Verlag;
-#use FrBr::Books::Util::Waehrung;
use FrBr::Books::Util::User;
=head1 NAME
$c->log->debug( get_output_string( $K . "Kategorien: ", $c->stash->{'kategorie_list'} ) );
# Verlage zusamensammeln
- my $verlagsliste = get_verlagsliste($c);
+ my $verlagsliste = $c->b_get_verlagsliste();
$c->log->debug( get_output_string( $K . "Verlage gesamt: ", $verlagsliste ) );
$c->stash->{'verlagsliste'} = {};
$c->stash->{'verlags_ids'} = [];
use base 'Catalyst::Controller';
use FrBr::Common;
-use FrBr::Books::Util::Verlag;
=head1 NAME
$c->session->{'verlag_list_page'} = $page;
}
- my ( $liste, $anzahl ) = get_verlagsliste( $c, 'get_books' => undef, 'page' => $page );
+ my ( $liste, $anzahl ) = $c->b_get_verlagsliste( 'get_books' => undef, 'page' => $page );
$c->log->debug( get_output_string( $K, "Erhaltene Liste der Verlage: ", $liste ) ) if $c->stash->{'debug_level'} >= 2;
$c->stash->{'verlage'} = $liste;
}
- my $verlagsliste = get_verlagsliste( $c, 'verlags_id' => $verlags_id, 'get_books' => 1, );
+ my $verlagsliste = $c->b_get_verlagsliste( 'verlags_id' => $verlags_id, 'get_books' => 1, );
$c->log->debug( get_output_string( $K, "Erhaltene Verlagsliste: ", $verlagsliste ) ) if $c->stash->{'debug_level'} >= 2;
unless ( $verlagsliste and scalar( @$verlagsliste ) ) {
}
# Angaben zum Verlag aus der Datenbank holen
- my $vliste = get_verlagsliste( $c, 'verlags_id' => $vid, );
+ my $vliste = $c->b_get_verlagsliste( 'verlags_id' => $vid, );
unless ( $vliste and scalar( @$vliste ) ) {
$c->stash->{'template'} = 'error.tt2';
$c->session->{'delete_verlags_id'} = $vid;
# Angaben zum Verlag aus der Datenbank holen
- my $vliste = get_verlagsliste( $c, 'verlags_id' => $vid );
+ my $vliste = $c->b_get_verlagsliste( 'verlags_id' => $vid );
unless ( $vliste and scalar( @$vliste ) ) {
$c->stash->{'template'} = 'error.tt2';
--- /dev/null
+package FrBr::Books::Plugin::Verlag;
+
+# $Id$
+# $URL$
+
+use strict;
+use warnings;
+
+use Carp qw/croak/;
+use FrBr::Common;
+
+our $VERSION = '0.02';
+{
+ my ($rev) = '$Revision$' =~ /(\d+)/;
+ $VERSION = sprintf( $VERSION . ".%d", $rev );
+}
+
+# &get_verlagsliste
+# &save_verlag
+# &delete_verlag
+
+=head1 NAME
+
+FrBr::Books::Plugin::Author - Plugin-Modul fuer Funktionen rund um Autoren
+
+=head1 METHODS
+
+=cut
+
+#-----------------------------------------------------------------------------------
+
+=head2 $c->b_get_verlagsliste( $params )
+
+Sammelt alle Verlage zusammen.
+
+Folgende benannte Parameter koennen ueber $params uebergeben werden:
+
+=over 4
+
+=item B<verlags_id>: Die ID eines konkreten Verlages
+
+=item B<get_books>: Bool. Zeigt an, daß zu den gefundenen Verlagen die dazugehörigen
+Bücher geholt werden sollen.
+
+=item B<page>
+
+Integer: Zeigt an, welche Seite von Verlagen dargestellt werden soll.
+
+Wenn nicht angegeben, werden alle Verlage zurückgegeben.
+
+=item B<list_length>
+
+Listenlänge einer Seite (wenn seitenweise gewünscht wird).
+
+=back
+
+Rueckgabe: Im skalaren Kontext eine Array-Ref von Hash-Refs mit allen Verlagen, die den uebergebenen Suchkriterien entsprechen:
+
+ $res = [
+ {
+ 'id' => 7,
+ 'name' => 'Heyne',
+ 'name_long' => 'Heyne-Verlag usw. GmbH & Co. KG',
+ 'count_books' => 22,
+ 'books' => [
+ {
+ 'id' => 8,
+ 'title' => 'Die Elfen',
+ 'title_original' => undef,
+ 'untertitel' => undef,
+ 'bindungsart_id' => 4,
+ 'bindungsart' => 'Softcover (Taschenbuch)',
+ 'orts_id' => 2,
+ 'isbn' => '3-453-53001-2',
+ 'buch_nr' => undef,
+ 'ausgabejahr' => '2004',
+ 'druckjahr' => '2005',
+ 'seiten' => 912,
+ 'preis' => 14,
+ 'waehrungs_id' => 1,
+ 'waehrungs_kuerzel' => '€',
+ 'waehrungs_name' => 'Euro',
+ 'umrechnung_in_euro' => 1,
+ 'ortsname' => 'Flur - Glasvitrine',
+ 'ort_beschreibung' => '',
+ 'ort_ist_statisch' => 'n',
+ 'autoren' => [ 'Bernhard Hennen', 'James Sullivan' ];
+ 'autor_ids' => [ 10, 12 ];
+ },
+ {
+ 'id' => 22,
+ },
+ ],
+ },
+ {
+ 'id' => 2,
+ ...
+ },
+ ...
+ ];
+
+Die Liste ist nach den Verlags-Namen alphabetisch sortiert.
+
+Im Listenkontext wird als zweiter Rückgabewert die Gesamtzahl aller Verlage zurueckgegeben.
+
+=cut
+
+sub b_get_verlagsliste {
+
+ my $c = shift;
+ my $K = ( caller(0) )[3] . "(): ";
+
+ $c->log->debug( $K . "aufgerufen." ) if $c->stash->{'debug_level'} > 2;
+
+ my $params = {};
+ if ( ref($_[0]) and ref($_[0]) eq 'HASH' ) {
+ $params = $_[0];
+ }
+ else {
+ %$params = @_;
+ }
+ $c->log->debug( get_output_string( $K, "Uebergebene Parameter: ", $params ) ) if $c->stash->{'debug_level'} >= 2;
+
+ my $list = [];
+ my $anzahl_verlage = 0;
+
+ my $page = to_int( $params->{'page'} ) ? to_int( $params->{'page'} ) : undef;
+ my $rows = to_int( $params->{'list_length'} ) ? to_int( $params->{'list_length'} ) : undef;
+ unless ( defined $rows ) {
+ $rows = $c->stash->{'list_length'} || 20 if defined $page;
+ }
+
+ my $search_params = undef;
+ if ( $params->{'verlags_id'} ) {
+ $search_params = {
+ 'me.id' => $params->{'verlags_id'},
+ };
+ }
+
+ $anzahl_verlage = $c->model('Schema::Verlage')->count( $search_params );
+ $c->log->debug( get_output_string( $K, "Anzahl gefundene Verlage: ", $anzahl_verlage ) ) if $c->stash->{'debug_level'} >= 2;
+
+ my $other_params = {};
+ $other_params->{'order_by'} = [ 'name_short' ];
+ $other_params->{'select'} = [
+ 'me.id',
+ 'me.name_short',
+ 'me.name_long',
+ { 'count' => 'buecher.id' }
+ ];
+ $other_params->{'as'} = [
+ 'id',
+ 'name_short',
+ 'name_long',
+ 'count_books',
+ ];
+ $other_params->{'join'} = [ 'buecher'];
+ $other_params->{'group_by'} = [ 'id' ];
+
+ if ( $page ) {
+ $other_params->{'rows'} = $rows;
+ $other_params->{'page'} = $page;
+ }
+
+ for my $verlag_rs ( $c->model('Schema::Verlage')->search( $search_params, $other_params )->all() ) {
+ my $verlag = {};
+ $verlag->{'id'} = $verlag_rs->id();
+ $verlag->{'name'} = $verlag_rs->name_short();
+ $verlag->{'name_long'} = $verlag_rs->name_long();
+ $verlag->{'count_books'} = $verlag_rs->get_column('count_books');
+ push @$list, $verlag;
+ }
+
+ return ( wantarray ? ( $list, 0 ) : $list ) unless scalar @$list;
+ return ( wantarray ? ( $list, $anzahl_verlage ) : $list ) unless $params->{'get_books'};
+
+ for my $verlag ( @$list ) {
+
+ $verlag->{'books'} = [];
+
+ my $vid = $verlag->{'id'};
+ $search_params = {
+ "verlags_id" => $vid,
+ };
+ $other_params = {};
+ $other_params->{'join'} = [ 'waehrung', 'ort', 'bindungsart' ];
+ $other_params->{'select'} = [
+ 'me.id',
+ 'me.title',
+ 'me.title_original',
+ 'me.untertitel',
+ 'me.bindungsart_id',
+ 'bindungsart.art_name',
+ 'me.orts_id',
+ 'me.isbn',
+ 'me.buch_nr',
+ 'me.ausgabejahr',
+ 'me.druckjahr',
+ 'me.seiten',
+ 'me.preis',
+ 'me.waehrungs_id',
+ 'waehrung.waehrungs_kuerzel',
+ 'waehrung.waehrungs_name',
+ 'waehrung.umrechnung_in_euro',
+ 'ort.name',
+ 'ort.descr',
+ 'ort.statisch',
+ ];
+ $other_params->{'as'} = [
+ 'id',
+ 'title',
+ 'title_original',
+ 'untertitel',
+ 'bindungsart_id',
+ 'bindungsart',
+ 'orts_id',
+ 'isbn',
+ 'buch_nr',
+ 'ausgabejahr',
+ 'druckjahr',
+ 'seiten',
+ 'preis',
+ 'waehrungs_id',
+ 'waehrungs_kuerzel',
+ 'waehrungs_name',
+ 'umrechnung_in_euro',
+ 'ortsname',
+ 'ort_beschreibung',
+ 'ort_ist_statisch',
+ ];
+
+ for my $book ( $c->model('Schema::Buecher')->search( $search_params, $other_params )->all() ) {
+ my $buch = {};
+ $buch->{'id'} = $book->id();
+ $buch->{'title'} = $book->title();
+ $buch->{'title_original'} = $book->title_original();
+ $buch->{'untertitel'} = $book->untertitel();
+ $buch->{'bindungsart_id'} = $book->bindungsart_id();
+ $buch->{'bindungsart'} = $book->get_column('bindungsart');
+ $buch->{'orts_id'} = $book->orts_id();
+ $buch->{'isbn'} = $book->isbn();
+ $buch->{'buch_nr'} = $book->buch_nr();
+ $buch->{'ausgabejahr'} = $book->ausgabejahr();
+ $buch->{'druckjahr'} = $book->druckjahr();
+ $buch->{'seiten'} = $book->seiten();
+ $buch->{'preis'} = $book->preis();
+ $buch->{'waehrungs_id'} = $book->waehrungs_id();
+ $buch->{'waehrungs_kuerzel'} = $book->get_column('waehrungs_kuerzel');
+ $buch->{'waehrungs_name'} = $book->get_column('waehrungs_name');
+ $buch->{'umrechnung_in_euro'} = $book->get_column('umrechnung_in_euro');
+ $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'} = [];
+
+ my $a_search_params = {};
+ $a_search_params->{'buch_id'} = $buch->{'id'};
+ $other_params = {};
+ $other_params->{'order_by'} = [ 'ord_num' ];
+ $other_params->{'join'} = [ 'autor' ];
+ $other_params->{'select'} = [
+ 'me.buch_id',
+ 'autor.id',
+ 'autor.titel',
+ 'autor.vorname',
+ 'autor.mittelname',
+ 'autor.nachname',
+ 'autor.name_suffix',
+ ];
+ $other_params->{'as'} = [
+ 'buch_id',
+ 'autor_id',
+ 'titel',
+ 'vorname',
+ 'mittelname',
+ 'nachname',
+ 'name_suffix',
+ ];
+ for my $ref ( $c->model('Schema::Autor2buch')->search( $a_search_params, $other_params )->all() ) {
+ my $aid = $ref->get_column('autor_id');
+ my @N;
+ push @N, $ref->get_column('titel') if $ref->get_column('titel');
+ push @N, $ref->get_column('vorname') if $ref->get_column('vorname');
+ push @N, $ref->get_column('mittelname') if $ref->get_column('mittelname');
+ push @N, $ref->get_column('nachname');
+ push @N, $ref->get_column('name_suffix') if $ref->get_column('name_suffix');
+ my $autor = join( " ", @N );
+ push @{ $buch->{'autoren'} }, $autor;
+ push @{ $buch->{'autor_ids'} }, $aid;
+ }
+
+ push @{ $verlag->{'books'} }, $buch;
+
+ }
+
+ }
+
+ return ( wantarray ? ( $list, $anzahl_verlage ) : $list );
+}
+
+#-----------------------------------------------------------------------------------
+
+=head2 $c->b_save_verlag( $verlag )
+
+=cut
+
+sub b_save_verlag {
+
+ my $c = shift;
+ my $verlag = shift;
+ my $K = ( caller(0) )[3] . "(): ";
+
+ $c->log->debug( $K . "aufgerufen." ) if $c->stash->{'debug_level'} > 2;
+
+ my $storage = $c->model('Schema')->storage;
+
+ my $save_func = sub {
+ my ( $storage, $dbh, $verlags_id, $name_short, $name_long ) = @_;
+ $name_long = '' unless defined $name_long;
+ my $sql = <<ENDE;
+INSERT INTO `verlage` (
+ `id`, `name_short`, `name_long` )
+ VALUES (
+ ?, ?, ? )
+ ON DUPLICATE KEY UPDATE
+ `id` = LAST_INSERT_ID(`id`), `name_short` = ?, `name_long` = ?
+ENDE
+
+ if ( $storage->debug() ) {
+ my $text = $sql;
+ $text =~ s/\s+$//;
+ $text .= ": " . join( ", ", map { $dbh->quote($_) } ( $verlags_id, $name_short, $name_long, $name_short, $name_long ) ) . "\n";
+ warn $text;
+ }
+
+ my $sth = $dbh->prepare($sql);
+ $sth->execute( $verlags_id, $name_short, $name_long, $name_short, $name_long );
+ };
+
+ $storage->dbh_do( $save_func, $verlag->{'id'}, $verlag->{'name'}, $verlag->{'name_long'} );
+
+ return $storage->last_insert_id();
+
+}
+
+#-----------------------------------------------------------------------------------
+
+=head2 $c->b_delete_verlag( $verlags_id )
+
+Loescht den Verlag mit der uebergebenen Verlags-Id
+
+=cut
+
+sub b_delete_verlag {
+
+ my $c = shift;
+ my $verlags_id = shift;
+ my $K = ( caller(0) )[3] . "(): ";
+
+ $c->log->debug( $K . "aufgerufen fuer Verlags-Id " . ( defined $verlags_id ? $verlags_id : '<undef>' ) . "." ) if $c->stash->{'debug_level'} > 2;
+
+ return undef unless $verlags_id and to_int($verlags_id);
+ $verlags_id = to_int($verlags_id);
+
+ my $schema = $c->model('Schema')->{'schema'};
+
+ # Raus, wenn der Verlag noch Buecher hat ...
+ if ( $c->model('Schema::Buecher')->count( { 'verlags_id' => $verlags_id, } ) ) {
+ my $msg = 'Es existieren noch Buecher dieses Verlags.';
+ die $msg . "\n";
+ }
+
+ # Das eigentliche Löschen
+ my $coderef = sub {
+ $c->model('Schema::Verlage')->search( { 'id' => $verlags_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
+
+=head1 LICENSE
+
+This library is free software, you can redistribute it and/or modify
+it under the same terms as Perl itself.
+
+=cut
+
+1;
+
+__END__
+
+# vim: noai : ts=4 fenc=utf-8 filetype=perl expandtab :
+++ /dev/null
-package FrBr::Books::Util::Verlag;
-
-# $Id$
-# $URL$
-
-use strict;
-use warnings;
-
-use FrBr::Common;
-
-# Export-Deklarationen
-
-BEGIN {
-
- use Exporter();
- our ( $VERSION, @ISA, @EXPORT, @EXPORT_OK, %EXPORT_TAGS );
-
- # set the version for version checking
- $VERSION = 0.1;
- my ($rev) = '$Revision$' =~ /(\d+)/;
- $VERSION = sprintf( $VERSION . ".%d", $rev );
-
- @ISA = qw(Exporter);
- @EXPORT = qw(
- &get_verlagsliste
- &save_verlag
- &delete_verlag
- );
-
- #%EXPORT_TAGS = ( ); # eg: TAG => [ qw!name1 name2! ],
-
- # your exported package globals go here,
- # as well as any optionally exported functions
- #@EXPORT_OK = qw($Var1 %Hashit &func3);
-} ## end BEGIN
-
-our @EXPORT_OK;
-
-=head1 NAME
-
-FrBr::Books::Util::Author - Modul fuer Funktionen rund um Autoren
-
-=head1 METHODS
-
-=cut
-
-#-----------------------------------------------------------------------------------
-
-=head2 get_verlagsliste( $c, $params )
-
-Sammelt alle Verlage zusammen.
-
-Folgende benannte Parameter koennen ueber $params uebergeben werden:
-
-=over 4
-
-=item B<verlags_id>: Die ID eines konkreten Verlages
-
-=item B<get_books>: Bool. Zeigt an, daß zu den gefundenen Verlagen die dazugehörigen
-Bücher geholt werden sollen.
-
-=item B<page>
-
-Integer: Zeigt an, welche Seite von Verlagen dargestellt werden soll.
-
-Wenn nicht angegeben, werden alle Verlage zurückgegeben.
-
-=back
-
-Rueckgabe: Im skalaren Kontext eine Array-Ref von Hash-Refs mit allen Verlagen, die den uebergebenen Suchkriterien entsprechen:
-
- $res = [
- {
- 'id' => 7,
- 'name' => 'Heyne',
- 'name_long' => 'Heyne-Verlag usw. GmbH & Co. KG',
- 'count_books' => 22,
- 'books' => [
- {
- 'id' => 8,
- 'title' => 'Die Elfen',
- 'title_original' => undef,
- 'untertitel' => undef,
- 'bindungsart_id' => 4,
- 'bindungsart' => 'Softcover (Taschenbuch)',
- 'orts_id' => 2,
- 'isbn' => '3-453-53001-2',
- 'buch_nr' => undef,
- 'ausgabejahr' => '2004',
- 'druckjahr' => '2005',
- 'seiten' => 912,
- 'preis' => 14,
- 'waehrungs_id' => 1,
- 'waehrungs_kuerzel' => '€',
- 'waehrungs_name' => 'Euro',
- 'umrechnung_in_euro' => 1,
- 'ortsname' => 'Flur - Glasvitrine',
- 'ort_beschreibung' => '',
- 'ort_ist_statisch' => 'n',
- 'autoren' => [ 'Bernhard Hennen', 'James Sullivan' ];
- 'autor_ids' => [ 10, 12 ];
- },
- {
- 'id' => 22,
- },
- ],
- },
- {
- 'id' => 2,
- ...
- },
- ...
- ];
-
-Die Liste ist nach den Verlags-Namen alphabetisch sortiert.
-
-Im Listenkontext wird als zweiter Rückgabewert die Gesamtzahl aller Verlage zurueckgegeben.
-
-=cut
-
-sub get_verlagsliste {
-
- my $c = shift;
- my $K = ( caller(0) )[3] . "(): ";
-
- $c->log->debug( $K . "aufgerufen." ) if $c->stash->{'debug_level'} > 2;
-
- my $params = {};
- if ( ref($_[0]) and ref($_[0]) eq 'HASH' ) {
- $params = $_[0];
- }
- else {
- %$params = @_;
- }
- $c->log->debug( get_output_string( $K, "Uebergebene Parameter: ", $params ) ) if $c->stash->{'debug_level'} >= 2;
-
- my $list = [];
- my $anzahl_verlage = 0;
-
- my $page = to_int( $params->{'page'} ) ? to_int( $params->{'page'} ) : undef;
- my $rows = undef;
- $rows = $c->stash->{'list_length'} || 20 if defined $page;
-
- my $search_params = undef;
- if ( $params->{'verlags_id'} ) {
- $search_params = {
- 'me.id' => $params->{'verlags_id'},
- };
- }
-
- $anzahl_verlage = $c->model('Schema::Verlage')->count( $search_params );
- $c->log->debug( get_output_string( $K, "Anzahl gefundene Verlage: ", $anzahl_verlage ) ) if $c->stash->{'debug_level'} >= 2;
-
- my $other_params = {};
- $other_params->{'order_by'} = [ 'name_short' ];
- $other_params->{'select'} = [
- 'me.id',
- 'me.name_short',
- 'me.name_long',
- { 'count' => 'buecher.id' }
- ];
- $other_params->{'as'} = [
- 'id',
- 'name_short',
- 'name_long',
- 'count_books',
- ];
- $other_params->{'join'} = [ 'buecher'];
- $other_params->{'group_by'} = [ 'id' ];
-
- if ( $page ) {
- $other_params->{'rows'} = $rows;
- $other_params->{'page'} = $page;
- }
-
- for my $verlag_rs ( $c->model('Schema::Verlage')->search( $search_params, $other_params )->all() ) {
- my $verlag = {};
- $verlag->{'id'} = $verlag_rs->id();
- $verlag->{'name'} = $verlag_rs->name_short();
- $verlag->{'name_long'} = $verlag_rs->name_long();
- $verlag->{'count_books'} = $verlag_rs->get_column('count_books');
- push @$list, $verlag;
- }
-
- return ( wantarray ? ( $list, 0 ) : $list ) unless scalar @$list;
- return ( wantarray ? ( $list, $anzahl_verlage ) : $list ) unless $params->{'get_books'};
-
- for my $verlag ( @$list ) {
-
- $verlag->{'books'} = [];
-
- my $vid = $verlag->{'id'};
- $search_params = {
- "verlags_id" => $vid,
- };
- $other_params = {};
- $other_params->{'join'} = [ 'waehrung', 'ort', 'bindungsart' ];
- $other_params->{'select'} = [
- 'me.id',
- 'me.title',
- 'me.title_original',
- 'me.untertitel',
- 'me.bindungsart_id',
- 'bindungsart.art_name',
- 'me.orts_id',
- 'me.isbn',
- 'me.buch_nr',
- 'me.ausgabejahr',
- 'me.druckjahr',
- 'me.seiten',
- 'me.preis',
- 'me.waehrungs_id',
- 'waehrung.waehrungs_kuerzel',
- 'waehrung.waehrungs_name',
- 'waehrung.umrechnung_in_euro',
- 'ort.name',
- 'ort.descr',
- 'ort.statisch',
- ];
- $other_params->{'as'} = [
- 'id',
- 'title',
- 'title_original',
- 'untertitel',
- 'bindungsart_id',
- 'bindungsart',
- 'orts_id',
- 'isbn',
- 'buch_nr',
- 'ausgabejahr',
- 'druckjahr',
- 'seiten',
- 'preis',
- 'waehrungs_id',
- 'waehrungs_kuerzel',
- 'waehrungs_name',
- 'umrechnung_in_euro',
- 'ortsname',
- 'ort_beschreibung',
- 'ort_ist_statisch',
- ];
-
- for my $book ( $c->model('Schema::Buecher')->search( $search_params, $other_params )->all() ) {
- my $buch = {};
- $buch->{'id'} = $book->id();
- $buch->{'title'} = $book->title();
- $buch->{'title_original'} = $book->title_original();
- $buch->{'untertitel'} = $book->untertitel();
- $buch->{'bindungsart_id'} = $book->bindungsart_id();
- $buch->{'bindungsart'} = $book->get_column('bindungsart');
- $buch->{'orts_id'} = $book->orts_id();
- $buch->{'isbn'} = $book->isbn();
- $buch->{'buch_nr'} = $book->buch_nr();
- $buch->{'ausgabejahr'} = $book->ausgabejahr();
- $buch->{'druckjahr'} = $book->druckjahr();
- $buch->{'seiten'} = $book->seiten();
- $buch->{'preis'} = $book->preis();
- $buch->{'waehrungs_id'} = $book->waehrungs_id();
- $buch->{'waehrungs_kuerzel'} = $book->get_column('waehrungs_kuerzel');
- $buch->{'waehrungs_name'} = $book->get_column('waehrungs_name');
- $buch->{'umrechnung_in_euro'} = $book->get_column('umrechnung_in_euro');
- $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'} = [];
-
- my $a_search_params = {};
- $a_search_params->{'buch_id'} = $buch->{'id'};
- $other_params = {};
- $other_params->{'order_by'} = [ 'ord_num' ];
- $other_params->{'join'} = [ 'autor' ];
- $other_params->{'select'} = [
- 'me.buch_id',
- 'autor.id',
- 'autor.titel',
- 'autor.vorname',
- 'autor.mittelname',
- 'autor.nachname',
- 'autor.name_suffix',
- ];
- $other_params->{'as'} = [
- 'buch_id',
- 'autor_id',
- 'titel',
- 'vorname',
- 'mittelname',
- 'nachname',
- 'name_suffix',
- ];
- for my $ref ( $c->model('Schema::Autor2buch')->search( $a_search_params, $other_params )->all() ) {
- my $aid = $ref->get_column('autor_id');
- my @N;
- push @N, $ref->get_column('titel') if $ref->get_column('titel');
- push @N, $ref->get_column('vorname') if $ref->get_column('vorname');
- push @N, $ref->get_column('mittelname') if $ref->get_column('mittelname');
- push @N, $ref->get_column('nachname');
- push @N, $ref->get_column('name_suffix') if $ref->get_column('name_suffix');
- my $autor = join( " ", @N );
- push @{ $buch->{'autoren'} }, $autor;
- push @{ $buch->{'autor_ids'} }, $aid;
- }
-
- push @{ $verlag->{'books'} }, $buch;
-
- }
-
- }
-
- return ( wantarray ? ( $list, $anzahl_verlage ) : $list );
-}
-
-#-----------------------------------------------------------------------------------
-
-=head2 save_verlag( $c, $verlag )
-
-=cut
-
-sub save_verlag {
-
- my $c = shift;
- my $verlag = shift;
- my $K = __PACKAGE__ . "::save_verlag(): ";
-
- $c->log->debug( $K . "aufgerufen." ) if $c->stash->{'debug_level'} > 2;
-
- my $storage = $c->stash->{'storage'};
-
- my $save_func = sub {
- my ( $storage, $dbh, $verlags_id, $name_short, $name_long ) = @_;
- $name_long = '' unless defined $name_long;
- my $sql = <<ENDE;
-INSERT INTO `verlage` (
- `id`, `name_short`, `name_long` )
- VALUES (
- ?, ?, ? )
- ON DUPLICATE KEY UPDATE
- `id` = LAST_INSERT_ID(`id`), `name_short` = ?, `name_long` = ?
-ENDE
-
- if ( $storage->debug() ) {
- my $text = $sql;
- $text =~ s/\s+$//;
- $text .= ": " . join( ", ", map { $dbh->quote($_) } ( $verlags_id, $name_short, $name_long, $name_short, $name_long ) ) . "\n";
- warn $text;
- }
-
- my $sth = $dbh->prepare($sql);
- $sth->execute( $verlags_id, $name_short, $name_long, $name_short, $name_long );
- };
-
- $storage->dbh_do( $save_func, $verlag->{'id'}, $verlag->{'name'}, $verlag->{'name_long'} );
-
- return $storage->last_insert_id();
-
-}
-
-#-----------------------------------------------------------------------------------
-
-=head2 delete_verlag( $c, $verlags_id )
-
-Loescht den Verlag mit der uebergebenen Verlags-Id
-
-=cut
-
-sub delete_verlag {
-
- my $c = shift;
- my $verlags_id = shift;
- my $K = ( caller(0) )[3] . "(): ";
-
- $c->log->debug( $K . "aufgerufen fuer Verlags-Id " . ( defined $verlags_id ? $verlags_id : '<undef>' ) . "." ) if $c->stash->{'debug_level'} > 2;
-
- return undef unless $verlags_id and to_int($verlags_id);
- $verlags_id = to_int($verlags_id);
-
- my $schema = $c->model('Schema')->{'schema'};
-
- # Raus, wenn der Verlag noch Buecher hat ...
- if ( $c->model('Schema::Buecher')->count( { 'verlags_id' => $verlags_id, } ) ) {
- my $msg = 'Es existieren noch Buecher dieses Verlags.';
- die $msg . "\n";
- }
-
- # Das eigentliche Löschen
- my $coderef = sub {
- $c->model('Schema::Verlage')->search( { 'id' => $verlags_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
-
-=head1 LICENSE
-
-This library is free software, you can redistribute it and/or modify
-it under the same terms as Perl itself.
-
-=cut
-
-1;
-
-__END__
-
-# vim: noai : ts=4 fenc=utf-8 filetype=perl