GL: single-dbh
[kivitendo-erp.git] / SL / GL.pm
index 1d917bd..bd8113e 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,24 @@ sub delete_transaction {
   my ($self, $myconfig, $form) = @_;
   $main::lxdebug->enter_sub();
 
-  # connect to database
-  my $dbh = $form->dbconnect_noauto($myconfig);
-
-  # acc_trans entries are deleted by database triggers.
-  do_query($form, $dbh, qq|DELETE FROM gl WHERE id = ?|, conv_i($form->{id}));
+  SL::DB->with_transaction(sub {
+    do_query($form, SL::DB->client->dbh, qq|DELETE FROM gl WHERE id = ?|, conv_i($form->{id}));
+  });
 
-  # commit and redirect
-  my $rc = $dbh->commit;
-  $dbh->disconnect;
   $main::lxdebug->leave_sub();
+}
 
-  $rc;
+sub post_transaction {
+  my ($self, $myconfig, $form) = @_;
+  $main::lxdebug->enter_sub();
+
+  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 +76,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,17 +205,11 @@ 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 {
@@ -231,9 +227,9 @@ sub all_transactions {
     $glwhere .= qq| AND g.reference ILIKE ?|;
     $arwhere .= qq| AND a.invnumber ILIKE ?|;
     $apwhere .= qq| AND a.invnumber ILIKE ?|;
-    push(@glvalues, $::form->like($form->{reference}));
-    push(@arvalues, $::form->like($form->{reference}));
-    push(@apvalues, $::form->like($form->{reference}));
+    push(@glvalues, like($form->{reference}));
+    push(@arvalues, like($form->{reference}));
+    push(@apvalues, like($form->{reference}));
   }
 
   if ($form->{department}) {
@@ -250,9 +246,9 @@ sub all_transactions {
     $glwhere .= " AND ac.trans_id IN (SELECT trans_id from acc_trans WHERE source ILIKE ?)";
     $arwhere .= " AND ac.trans_id IN (SELECT trans_id from acc_trans WHERE source ILIKE ?)";
     $apwhere .= " AND ac.trans_id IN (SELECT trans_id from acc_trans WHERE source ILIKE ?)";
-    push(@glvalues, $::form->like($form->{source}));
-    push(@arvalues, $::form->like($form->{source}));
-    push(@apvalues, $::form->like($form->{source}));
+    push(@glvalues, like($form->{source}));
+    push(@arvalues, like($form->{source}));
+    push(@apvalues, like($form->{source}));
   }
 
   # default Datumseinschränkung falls nicht oder falsch übergeben (sollte nie passieren)
@@ -280,9 +276,9 @@ sub all_transactions {
     $glwhere .= " AND g.description ILIKE ?";
     $arwhere .= " AND ct.name ILIKE ?";
     $apwhere .= " AND ct.name ILIKE ?";
-    push(@glvalues, $::form->like($form->{description}));
-    push(@arvalues, $::form->like($form->{description}));
-    push(@apvalues, $::form->like($form->{description}));
+    push(@glvalues, like($form->{description}));
+    push(@arvalues, like($form->{description}));
+    push(@apvalues, like($form->{description}));
   }
 
   if ($form->{employee_id}) {
@@ -298,9 +294,9 @@ sub all_transactions {
     $glwhere .= " AND g.notes ILIKE ?";
     $arwhere .= " AND a.notes ILIKE ?";
     $apwhere .= " AND a.notes ILIKE ?";
-    push(@glvalues, $::form->like($form->{notes}));
-    push(@arvalues, $::form->like($form->{notes}));
-    push(@apvalues, $::form->like($form->{notes}));
+    push(@glvalues, like($form->{notes}));
+    push(@arvalues, like($form->{notes}));
+    push(@apvalues, like($form->{notes}));
   }
 
   if ($form->{accno}) {
@@ -710,12 +706,20 @@ sub transaction {
 }
 
 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 +756,7 @@ sub storno {
     do_query($form, $dbh, $query, (values %$row));
   }
 
-  $dbh->commit;
-
-  $main::lxdebug->leave_sub();
+  return 1;
 }
 
 sub get_chart_balances {