X-Git-Url: http://wagnertech.de/git?p=kivitendo-erp.git;a=blobdiff_plain;f=SL%2FDB%2FHelper%2FActsAsList.pm;fp=SL%2FDB%2FHelper%2FActsAsList.pm;h=7ca63a353fde47542a4a3740076a770fa488190a;hp=f48e9967a834546eda7fd10821101bbba0afa7bf;hb=53593baa211863fbf66540cf1bcc36c8fb37257f;hpb=deb4d2dbb676d7d6f69dfe7815d6e0cb09bd4a44 diff --git a/SL/DB/Helper/ActsAsList.pm b/SL/DB/Helper/ActsAsList.pm index f48e9967a..7ca63a353 100644 --- a/SL/DB/Helper/ActsAsList.pm +++ b/SL/DB/Helper/ActsAsList.pm @@ -7,6 +7,7 @@ our @EXPORT = qw(move_position_up move_position_down add_to_list remove_from_lis get_previous_in_list get_next_in_list get_full_list); use Carp; +use SL::X; my %list_spec; @@ -40,7 +41,7 @@ sub move_position_down { sub remove_from_list { my ($self) = @_; - my $worker = sub { + return $self->db->with_transaction(sub { remove_position($self); # Set to -1 manually because $self->update_attributes() would @@ -56,9 +57,7 @@ sub remove_from_list { SQL $self->db->dbh->do($sql, undef, $self->$primary_key_col); $self->$column(undef); - }; - - return $self->db->in_transaction ? $worker->() : $self->db->do_transaction($worker); + }); } sub add_to_list { @@ -109,12 +108,10 @@ sub add_to_list { ${group_by} SQL - my $worker = sub { + return $self->db->with_transaction(sub { $self->db->dbh->do($query, undef, $new_position - 1, @values); $self->update_attributes($column => $new_position); - }; - - return $self->db->in_transaction ? $worker->() : $self->db->do_transaction($worker); + }); } sub get_next_in_list { @@ -144,15 +141,17 @@ sub reorder_list { my $self = ref($class_or_self) ? $class_or_self : $class_or_self->new; my $column = column_name($self); - my $result = $self->db->do_transaction(sub { + my $result = $self->db->with_transaction(sub { my $query = qq|UPDATE | . $self->meta->table . qq| SET ${column} = ? WHERE id = ?|; - my $sth = $self->db->dbh->prepare($query) || die $self->db->dbh->errstr; + my $sth = $self->db->dbh->prepare($query) || SL::X::DBUtilsError->throw(msg => 'reorder_list error', db_error => $self->db->dbh->errstr); foreach my $new_position (1 .. scalar(@ids)) { - $sth->execute($new_position, $ids[$new_position - 1]) || die $sth->errstr; + $sth->execute($new_position, $ids[$new_position - 1]) || SL::X::DBUtilsError->throw(msg => 'reorder_list error', db_error => $sth->errstr); } $sth->finish; + + 1; }); return $result;