Neue Maske: Auftragsartikelsuche
[kivitendo-erp.git] / SL / GL.pm
index 60b54e2..9e3806a 100644 (file)
--- a/SL/GL.pm
+++ b/SL/GL.pm
@@ -42,6 +42,7 @@ use Data::Dumper;
 use SL::DATEV qw(:CONSTANTS);
 use SL::DBUtils;
 use SL::Util qw(trim);
+use SL::DB;
 
 use strict;
 
@@ -49,22 +50,25 @@ sub delete_transaction {
   my ($self, $myconfig, $form) = @_;
   $main::lxdebug->enter_sub();
 
-  # connect to database
-  my $dbh = $form->dbconnect_noauto($myconfig);
+  SL::DB->client->with_transaction(sub {
+    do_query($form, SL::DB->client->dbh, qq|DELETE FROM gl WHERE id = ?|, conv_i($form->{id}));
+    1;
+  }) or do { die SL::DB->client->error };
 
-  # acc_trans entries are deleted by database triggers.
-  do_query($form, $dbh, qq|DELETE FROM gl WHERE id = ?|, conv_i($form->{id}));
-
-  # commit and redirect
-  my $rc = $dbh->commit;
-  $dbh->disconnect;
   $main::lxdebug->leave_sub();
+}
+
+sub post_transaction {
+  my ($self, $myconfig, $form) = @_;
+  $main::lxdebug->enter_sub();
 
-  $rc;
+  my $rc = SL::DB->client->with_transaction(\&_post_transaction, $self, $myconfig, $form);
 
+  $::lxdebug->leave_sub;
+  return $rc;
 }
 
-sub post_transaction {
+sub _post_transaction {
   my ($self, $myconfig, $form) = @_;
   $main::lxdebug->enter_sub();
 
@@ -73,8 +77,7 @@ sub post_transaction {
 
   my $i;
 
-  # connect to database, turn off AutoCommit
-  my $dbh = $form->dbconnect_noauto($myconfig);
+  my $dbh = SL::DB->client->dbh;
 
   # post the transaction
   # make up a unique handle and store in reference field
@@ -203,25 +206,18 @@ sub post_transaction {
     $datev->export;
 
     if ($datev->errors) {
-      $dbh->rollback;
       die join "\n", $::locale->text('DATEV check returned errors:'), $datev->errors;
     }
   }
 
-  # commit and redirect
-  my $rc = $dbh->commit;
-  $dbh->disconnect;
-  $main::lxdebug->leave_sub();
-
-  return $rc;
+  return 1;
 }
 
 sub all_transactions {
   my ($self, $myconfig, $form) = @_;
   $main::lxdebug->enter_sub();
 
-  # connect to database
-  my $dbh = $form->dbconnect($myconfig);
+  my $dbh = SL::DB->client->dbh;
   my ($query, $sth, $source, $null, $space);
 
   my ($glwhere, $arwhere, $apwhere) = ("1 = 1", "1 = 1", "1 = 1");
@@ -620,8 +616,6 @@ sub all_transactions {
     ($form->{account_description}) = selectrow_query($form, $dbh, $query, $form->{accno});
   }
 
-  $dbh->disconnect;
-
   $main::lxdebug->leave_sub();
 }
 
@@ -631,8 +625,7 @@ sub transaction {
 
   my ($query, $sth, $ref, @values);
 
-  # connect to database
-  my $dbh = $form->dbconnect($myconfig);
+  my $dbh = SL::DB->client->dbh;
 
   $query = qq|SELECT closedto, revtrans FROM defaults|;
   ($form->{closedto}, $form->{revtrans}) = selectrow_query($form, $dbh, $query);
@@ -704,18 +697,24 @@ sub transaction {
        ORDER BY c.accno|;
   $form->{chart} = selectall_hashref_query($form, $dbh, $query, conv_date($form->{transdate}));
 
-  $dbh->disconnect;
-
   $main::lxdebug->leave_sub();
 }
 
 sub storno {
+  my ($self, $form, $myconfig, $id) = @_;
   $main::lxdebug->enter_sub();
 
+  my $rc = SL::DB->client->with_transaction(\&_storno, $self, $form, $myconfig, $id);
+
+  $::lxdebug->leave_sub;
+  return $rc;
+}
+
+sub _storno {
   my ($self, $form, $myconfig, $id) = @_;
 
   my ($query, $new_id, $storno_row, $acc_trans_rows);
-  my $dbh = $form->get_standard_dbh($myconfig);
+  my $dbh = SL::DB->client->dbh;
 
   $query = qq|SELECT nextval('glid')|;
   ($new_id) = selectrow_query($form, $dbh, $query);
@@ -752,9 +751,7 @@ sub storno {
     do_query($form, $dbh, $query, (values %$row));
   }
 
-  $dbh->commit;
-
-  $main::lxdebug->leave_sub();
+  return 1;
 }
 
 sub get_chart_balances {