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 `verlage` aufmotzen.
+
+ALTER TABLE `verlage`
+ 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 `verlage_ibfk_1` FOREIGN KEY (`created_by`) REFERENCES `users` (`user_id`),
+ ADD CONSTRAINT `verlage_ibfk_2` FOREIGN KEY (`changed_by`) REFERENCES `users` (`user_id`);
+
+UPDATE `verlage` SET
+ `created_at` = NOW(),
+ `created_by` = 1,
+ `changed_at` = NOW(),
+ `changed_by` = 1;
+
+COMMIT;
+
+ALTER TABLE `verlage`
+ 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 :
__PACKAGE__->load_components("Core");
__PACKAGE__->table("verlage");
__PACKAGE__->add_columns(
- "id" => { data_type => "INT", default_value => undef, is_nullable => 0, size => 10 },
- "name_short" => { data_type => "VARCHAR", default_value => undef, is_nullable => 0, size => 50, },
- "name_long" => { data_type => "VARCHAR", default_value => undef, is_nullable => 0, size => 250, },
+ "id" => { data_type => "INT", default_value => undef, is_nullable => 0, size => 10 },
+ "name_short" => { data_type => "VARCHAR", default_value => undef, is_nullable => 0, size => 50, },
+ "name_long" => { data_type => "VARCHAR", default_value => undef, is_nullable => 0, size => 250, },
+ "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_short", ["name_short"]);
+__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( 'buecher' => 'FrBr::Books::Db::Result::Buecher', { 'foreign.verlags_id' => 'self.id' } );
1;
use Carp qw/croak/;
use FrBr::Common;
-our $VERSION = '0.2';
+our $VERSION = '0.3';
{
my ($rev) = '$Revision$' =~ /(\d+)/;
$VERSION = sprintf( $VERSION . ".%d", $rev );
$tmp =~ s/\s+$//;
$row->{'kategorie_name'} = $tmp;
- if ( $cat->{'id'} ) {
- $search_params->{'kategorie_name'} = $row->{'kategorie_name'};
- $search_params->{'id'} = { '!=' => $cat->{'id'} };
- $c->log->debug( get_output_string( $K, "Suche nach doppelter Kategorie mit: ", $search_params ) );
- if ( $c->model('Schema::Kategorien')->count( $search_params ) ) {
- die sprintf( "Die Kategorie '%s' existiert bereits.\n", $row->{'kategorie_name'} );
- }
- $row->{'id'} = $cat->{'id'};
+ $search_params->{'kategorie_name'} = $row->{'kategorie_name'};
+ $search_params->{'id'} = { '!=' => $cat->{'id'} } if $cat->{'id'};
+ $c->log->debug( get_output_string( $K, "Suche nach doppelter Kategorie mit: ", $search_params ) );
+ if ( $c->model('Schema::Kategorien')->count( $search_params ) ) {
+ die sprintf( "Die Kategorie '%s' existiert bereits.\n", $row->{'kategorie_name'} );
}
+ $row->{'id'} = $cat->{'id'} if $cat->{'id'};
my $user_id = $c->stash->{'current_user_id'} || 1;
$row->{'changed_at'} = \'NOW()';
use Carp qw/croak/;
use FrBr::Common;
-our $VERSION = '0.2';
+our $VERSION = '0.3';
{
my ($rev) = '$Revision$' =~ /(\d+)/;
$VERSION = sprintf( $VERSION . ".%d", $rev );
$tmp =~ s/\s+$//;
$row->{'name'} = $tmp;
- if ( $ort->{'id'} ) {
- $search_params->{'name'} = $row->{'name'};
- $search_params->{'id'} = { '!=' => $ort->{'id'} };
- $c->log->debug( get_output_string( $K, "Suche nach doppeltem Aufbewahrungsort mit: ", $search_params ) );
- if ( $c->model('Schema::Orte')->count( $search_params ) ) {
- die sprintf( "Der Aufbewahrungsort '%s' existiert bereits.\n", $row->{'name'} );
- }
- $row->{'id'} = $ort->{'id'};
+ $search_params->{'name'} = $row->{'name'};
+ $search_params->{'id'} = { '!=' => $ort->{'id'} } if $ort->{'id'};
+ $c->log->debug( get_output_string( $K, "Suche nach doppeltem Aufbewahrungsort mit: ", $search_params ) );
+ if ( $c->model('Schema::Orte')->count( $search_params ) ) {
+ die sprintf( "Der Aufbewahrungsort '%s' existiert bereits.\n", $row->{'name'} );
}
+ $row->{'id'} = $ort->{'id'} if $ort->{'id'};
$tmp = $ort->{'descr'};
$tmp = '' unless defined $tmp;
use Carp qw/croak/;
use FrBr::Common;
-our $VERSION = '0.2';
+our $VERSION = '0.3';
{
my ($rev) = '$Revision$' =~ /(\d+)/;
$VERSION = sprintf( $VERSION . ".%d", $rev );
$tmp =~ s/\s+$//;
$row->{'serien_name'} = $tmp;
- if ( $serie->{'id'} ) {
- $search_params->{'serien_name'} = $row->{'serien_name'};
- $search_params->{'id'} = { '!=' => $serie->{'id'} };
- $c->log->debug( get_output_string( $K, "Suche nach doppelter Serie mit: ", $search_params ) );
- if ( $c->model('Schema::Serien')->count( $search_params ) ) {
- die sprintf( "Die Buchserie '%s' existiert bereits.\n", $row->{'serien_name'} );
- }
- $row->{'id'} = $serie->{'id'};
+ $search_params->{'serien_name'} = $row->{'serien_name'};
+ $search_params->{'id'} = { '!=' => $serie->{'id'} } if $serie->{'id'};
+ $c->log->debug( get_output_string( $K, "Suche nach doppelter Serie mit: ", $search_params ) );
+ if ( $c->model('Schema::Serien')->count( $search_params ) ) {
+ die sprintf( "Die Buchserie '%s' existiert bereits.\n", $row->{'serien_name'} );
}
+ $row->{'id'} = $serie->{'id'} if $serie->{'id'};
$tmp = $serie->{'descr'};
$tmp = '' unless defined $tmp;
use Carp qw/croak/;
use FrBr::Common;
-our $VERSION = '0.02';
+our $VERSION = '0.3';
{
my ($rev) = '$Revision$' =~ /(\d+)/;
$VERSION = sprintf( $VERSION . ".%d", $rev );
$res = [
{
- 'id' => 7,
- 'name' => 'Heyne',
- 'name_long' => 'Heyne-Verlag usw. GmbH & Co. KG',
- 'count_books' => 22,
+ 'id' => 7,
+ 'name' => 'Heyne',
+ 'name_long' => 'Heyne-Verlag usw. GmbH & Co. KG',
+ 'count_books' => 22,
+ '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' => 8,
$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->{'order_by'} = [ 'me.name_short' ];
+ $other_params->{'join'} = [
+ 'buecher',
+ 'created_by',
+ 'changed_by',
+ ];
$other_params->{'select'} = [
'me.id',
'me.name_short',
'me.name_long',
- { 'count' => 'buecher.id' }
+ 'me.created_by',
+ 'created_by.vorname',
+ 'created_by.nachname',
+ 'me.created_at',
+ 'me.changed_by',
+ 'changed_by.vorname',
+ 'changed_by.nachname',
+ 'me.changed_at',
+ { 'count' => 'buecher.id' }
];
$other_params->{'as'} = [
'id',
'name_short',
'name_long',
- 'count_books',
+ 'created_by',
+ 'created_by_vorname',
+ 'created_by_nachname',
+ 'created_at',
+ 'changed_by',
+ 'changed_by_vorname',
+ 'changed_by_nachname',
+ 'changed_at',
+ 'count_books',
];
- $other_params->{'join'} = [ 'buecher'];
- $other_params->{'group_by'} = [ 'id' ];
+ $other_params->{'group_by'} = [ 'me.id' ];
- if ( $page ) {
- $other_params->{'rows'} = $rows;
- $other_params->{'page'} = $page;
- }
+ 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 $vorname = '';
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');
+
+ $verlag->{'id_created_by'} = $verlag_rs->get_column('created_by');
+ $verlag->{'created_at'} = $verlag_rs->get_column('created_at');
+ $verlag->{'name_created_by'} = $verlag_rs->get_column('created_by_nachname');
+ $vorname = $verlag_rs->get_column('created_by_vorname');
+ $verlag->{'name_created_by'} = $vorname . ' ' . $verlag->{'name_created_by'} if $vorname;
+
+ $verlag->{'id_changed_by'} = $verlag_rs->get_column('changed_by');
+ $verlag->{'changed_at'} = $verlag_rs->get_column('changed_at');
+ $verlag->{'name_changed_by'} = $verlag_rs->get_column('changed_by_nachname');
+ $vorname = $verlag_rs->get_column('changed_by_vorname');
+ $verlag->{'name_changed_by'} = $vorname . ' ' . $verlag->{'name_changed_by'} if $vorname;
+
push @$list, $verlag;
+
}
return ( wantarray ? ( $list, 0 ) : $list ) unless scalar @$list;
$c->log->debug( $K . "aufgerufen." ) if $c->stash->{'debug_level'} > 2;
+ my $schema = $c->model('Schema')->{'schema'};
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 $row = {};
+ my $search_params = {};
+
+ my $tmp = $verlag->{'name'};
+ $tmp = '' unless defined $tmp;
+ $tmp =~ s/^\s+//;
+ $tmp =~ s/\s+$//;
+ $row->{'name_short'} = $tmp;
+
+ $search_params->{'name_short'} = $row->{'name_short'};
+ $search_params->{'id'} = { '!=' => $verlag->{'id'} } if $verlag->{'id'};
+ $c->log->debug( get_output_string( $K, "Suche nach doppeltem Verlag mit: ", $search_params ) );
+ if ( $c->model('Schema::Verlage')->count( $search_params ) ) {
+ die sprintf( "Der Verlag '%s' existiert bereits.\n", $row->{'name_short'} );
+ }
+ $row->{'id'} = $verlag->{'id'} if $verlag->{'id'};
+
+ $tmp = $verlag->{'name_long'};
+ $tmp = '' unless defined $tmp;
+ $tmp =~ s/^\s+//;
+ $tmp =~ s/\s+$//;
+ $row->{'name_long'} = $tmp;
+
+ my $user_id = $c->stash->{'current_user_id'} || 1;
+ $row->{'changed_at'} = \'NOW()';
+ $row->{'changed_by'} = $user_id;
+
+ $c->log->debug( get_output_string( $K, "Zu speichernder Verlag: ", $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_short';
+
+ my $rs = $c->model('Schema::Verlage')->update_or_new( $row, $key_hash );
+
+ if ( $rs->in_storage() ) {
+
+ $c->log->debug( $K . "Den Verlag gibt es schon ..." );
+
+ $rs->set_column( 'id' => \'LAST_INSERT_ID(`id`)' );
+ my $spalten = {};
+ %$spalten = $rs->get_columns();
+ $c->log->debug( get_output_string( $K, "Die Spalten des Verlags: ", $spalten ) );
+ undef $spalten;
+
+ $rs->update();
+
}
+ else {
+ $c->log->debug( $K . "Neuer Verlag ..." );
+ $rs->set_column( 'created_by' => $user_id );
+ $rs->set_column( 'created_at' => \'NOW()' );
+ my $spalten = {};
+ %$spalten = $rs->get_columns();
+ $c->log->debug( get_output_string( $K, "Die Spalten des Verlags: ", $spalten ) );
+ undef $spalten;
+
+ $rs->insert();
+ }
+
+ $id = $storage->last_insert_id();
- 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'} );
+ # Und ab ...
+ eval {
+ $schema->txn_do($txn_code);
+ };
+
+ if ($@) { # Transaction failed
+ my $msg = $@ =~ /Rollback failed/i ? "Rollback nicht erfolgreich!" : $@;
+ die $msg . "\n";
+ return undef;
+ }
- return $storage->last_insert_id();
+ return $id;
}