Aufträge - Abteilung per ALL_DEPARTMENTS und L.select_tag
[kivitendo-erp.git] / SL / GL.pm
index 1d917bd..09fc2f0 100644 (file)
--- a/SL/GL.pm
+++ b/SL/GL.pm
@@ -25,7 +25,8 @@
 # GNU General Public License for more details.
 # You should have received a copy of the GNU General Public License
 # along with this program; if not, write to the Free Software
-# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+# MA 02110-1335, USA.
 #======================================================================
 #
 # General ledger backend code
@@ -42,6 +43,7 @@ use Data::Dumper;
 use SL::DATEV qw(:CONSTANTS);
 use SL::DBUtils;
 use SL::Util qw(trim);
+use SL::DB;
 
 use strict;
 
@@ -49,22 +51,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 +78,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
@@ -109,8 +113,6 @@ sub post_transaction {
     do_query($form, $dbh, $query, @values);
   }
 
-  my ($null, $department_id) = split(/--/, $form->{department});
-
   $form->{ob_transaction} *= 1;
   $form->{cb_transaction} *= 1;
 
@@ -122,7 +124,7 @@ sub post_transaction {
        WHERE id = ?|;
 
   @values = ($form->{reference}, $form->{description}, $form->{notes},
-             conv_date($form->{transdate}), conv_i($department_id), $form->{taxincluded} ? 't' : 'f',
+             conv_date($form->{transdate}), conv_i($form->{department_id}), $form->{taxincluded} ? 't' : 'f',
              $form->{storno} ? 't' : 'f', conv_i($form->{storno_id}), $form->{ob_transaction} ? 't' : 'f', $form->{cb_transaction} ? 't' : 'f',
              conv_i($form->{id}));
   do_query($form, $dbh, $query, @values);
@@ -203,25 +205,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");
@@ -231,28 +226,27 @@ 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}) {
-    my ($null, $department) = split /--/, $form->{department};
+  if ($form->{department_id}) {
     $glwhere .= qq| AND g.department_id = ?|;
     $arwhere .= qq| AND a.department_id = ?|;
     $apwhere .= qq| AND a.department_id = ?|;
-    push(@glvalues, $department);
-    push(@arvalues, $department);
-    push(@apvalues, $department);
+    push(@glvalues, $form->{department_id});
+    push(@arvalues, $form->{department_id});
+    push(@apvalues, $form->{department_id});
   }
 
   if ($form->{source}) {
     $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 +274,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 +292,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}) {
@@ -620,8 +614,6 @@ sub all_transactions {
     ($form->{account_description}) = selectrow_query($form, $dbh, $query, $form->{accno});
   }
 
-  $dbh->disconnect;
-
   $main::lxdebug->leave_sub();
 }
 
@@ -631,8 +623,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);
@@ -645,7 +636,8 @@ sub transaction {
   if ($form->{id}) {
     $query =
       qq|SELECT g.reference, g.description, g.notes, g.transdate, g.storno, g.storno_id,
-           d.description AS department, e.name AS employee, g.taxincluded, g.gldate,
+           g.department_id, d.description AS department,
+           e.name AS employee, g.taxincluded, g.gldate,
          g.ob_transaction, g.cb_transaction
          FROM gl g
          LEFT JOIN department d ON (d.id = g.department_id)
@@ -704,18 +696,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 +750,7 @@ sub storno {
     do_query($form, $dbh, $query, (values %$row));
   }
 
-  $dbh->commit;
-
-  $main::lxdebug->leave_sub();
+  return 1;
 }
 
 sub get_chart_balances {