Part Controller - falschen Code aus kivi.Order.js wieder entfernt
[kivitendo-erp.git] / SL / BP.pm
index f2d0201..9cf0750 100644 (file)
--- a/SL/BP.pm
+++ b/SL/BP.pm
@@ -35,6 +35,7 @@
 package BP;
 
 use SL::DBUtils;
+use SL::DB;
 
 use strict;
 
@@ -83,8 +84,6 @@ sub get_vc {
     $sth->finish;
   }
 
-  $dbh->disconnect;
-
   $main::lxdebug->leave_sub();
 }
 
@@ -94,7 +93,7 @@ sub payment_accounts {
   my ($self, $myconfig, $form) = @_;
 
   # connect to database
-  my $dbh = $form->dbconnect($myconfig);
+  my $dbh = SL::DB->client->dbh;
 
   my $query =
     qq|SELECT DISTINCT ON (s.chart_id) c.accno, c.description | .
@@ -109,7 +108,6 @@ sub payment_accounts {
   }
 
   $sth->finish;
-  $dbh->disconnect;
 
   $main::lxdebug->leave_sub();
 }
@@ -119,8 +117,7 @@ sub get_spoolfiles {
 
   my ($self, $myconfig, $form) = @_;
 
-  # connect to database
-  my $dbh = $form->dbconnect($myconfig);
+  my $dbh = SL::DB->client->dbh;
 
   my ($query, $arap, @values);
   my $invnumber = "invnumber";
@@ -149,6 +146,7 @@ sub get_spoolfiles {
   } else {
     $arap = "ar";
     my $invoice = "a.invoice";
+    my $quonumber = "a.quonumber";
 
     if ($form->{type} =~ /_(order|quotation)$/) {
       $invnumber = "ordnumber";
@@ -156,16 +154,29 @@ sub get_spoolfiles {
       $invoice   = '0';
     }
 
+    if ($form->{type} eq 'packing_list') {
+      $invnumber = "donumber";
+      $arap      = "delivery_orders";
+      $invoice   = '0';
+      $quonumber = '0';
+    }
+
     $query =
-      qq|SELECT a.id, a.$invnumber AS invnumber, a.ordnumber, a.quonumber, | .
+      qq|SELECT a.id, a.$invnumber AS invnumber, a.ordnumber, $quonumber, | .
       qq|  a.transdate, $invoice AS invoice, '$arap' AS module, vc.name, | .
       qq|  s.spoolfile | .
       qq|FROM $arap a, ${vc} vc, status s | .
       qq|WHERE s.trans_id = a.id | .
       qq|  AND s.spoolfile IS NOT NULL | .
-      qq|  AND s.formname = ? | .
+    ($form->{type} eq 'packing_list'
+    ? qq|  AND s.formname IN (?, ?) |
+    : qq|  AND s.formname = ? |) .
       qq|  AND a.${vc}_id = vc.id|;
     @values = ($form->{type});
+
+    if ($form->{type} eq 'packing_list') {
+      @values = qw(sales_delivery_order purchase_delivery_order);
+    }
   }
 
   if ($form->{"${vc}_id"}) {
@@ -173,16 +184,16 @@ sub get_spoolfiles {
     push(@values, conv_i($form->{"${vc}_id"}));
   } elsif ($form->{ $vc }) {
     $query .= " AND vc.name ILIKE ?";
-    push(@values, $form->like($form->{ $vc }));
+    push(@values, like($form->{ $vc }));
   }
-  foreach my $column (qw(invnumber ordnumber quonumber)) {
+  foreach my $column (qw(invnumber ordnumber quonumber donumber)) {
     if ($form->{$column}) {
       $query .= " AND a.$column ILIKE ?";
-      push(@values, $form->like($form->{$column}));
+      push(@values, like($form->{$column}));
     }
   }
 
-  if ($form->{type} =~ /(invoice|sales_order|sales_quotation|puchase_order|request_quotation)$/) {
+  if ($form->{type} =~ /(invoice|sales_order|sales_quotation|purchase_order|request_quotation|packing_list)$/) {
     if ($form->{transdatefrom}) {
       $query .= " AND a.transdate >= ?";
       push(@values, $form->{transdatefrom});
@@ -197,7 +208,7 @@ sub get_spoolfiles {
   my $sortorder = join ', ', $form->sort_columns(@a);
 
   if (grep({ $_ eq $form->{sort} }
-           qw(transdate invnumber ordnumber quonumber name))) {
+           qw(transdate invnumber ordnumber quonumber donumber name))) {
     $sortorder = $form->{sort};
   }
 
@@ -213,7 +224,6 @@ sub get_spoolfiles {
   }
 
   $sth->finish;
-  $dbh->disconnect;
 
   $main::lxdebug->leave_sub();
 }
@@ -225,42 +235,37 @@ sub delete_spool {
 
   my $spool = $::lx_office_conf{paths}->{spool};
 
-  # connect to database, turn AutoCommit off
-  my $dbh = $form->dbconnect_noauto($myconfig);
-
-  my $query;
+  SL::DB->client->with_transaction(sub {
+    my $dbh = SL::DB->client->dbh;
 
-  if ($form->{type} =~ /(check|receipt)/) {
-    $query = qq|DELETE FROM status WHERE spoolfile = ?|;
-  } else {
-    $query =
-      qq|UPDATE status SET spoolfile = NULL, printed = '1' | .
-      qq|WHERE spoolfile = ?|;
-  }
-  my $sth = $dbh->prepare($query) || $form->dberror($query);
+    my $query;
 
-  foreach my $i (1 .. $form->{rowcount}) {
-    if ($form->{"checked_$i"}) {
-      $sth->execute($form->{"spoolfile_$i"}) || $form->dberror($query);
-      $sth->finish;
+    if ($form->{type} =~ /(check|receipt)/) {
+      $query = qq|DELETE FROM status WHERE spoolfile = ?|;
+    } else {
+      $query =
+        qq|UPDATE status SET spoolfile = NULL, printed = '1' | .
+        qq|WHERE spoolfile = ?|;
     }
-  }
+    my $sth = $dbh->prepare($query) || $form->dberror($query);
 
-  # commit
-  my $rc = $dbh->commit;
-  $dbh->disconnect;
+    foreach my $i (1 .. $form->{rowcount}) {
+      if ($form->{"checked_$i"}) {
+        $sth->execute($form->{"spoolfile_$i"}) || $form->dberror($query);
+        $sth->finish;
+      }
+    }
 
-  if ($rc) {
     foreach my $i (1 .. $form->{rowcount}) {
       if ($form->{"checked_$i"}) {
         unlink(qq|$spool/$form->{"spoolfile_$i"}|);
       }
     }
-  }
+    1;
+  }) or do { die SL::DB->client->error };
 
   $main::lxdebug->leave_sub();
-
-  return $rc;
+  return 1;
 }
 
 sub print_spool {
@@ -271,7 +276,7 @@ sub print_spool {
   my $spool = $::lx_office_conf{paths}->{spool};
 
   # connect to database
-  my $dbh = $form->dbconnect($myconfig);
+  my $dbh = SL::DB->client->dbh;
 
   my $query =
     qq|UPDATE status SET printed = '1' | .
@@ -302,8 +307,6 @@ sub print_spool {
     }
   }
 
-  $dbh->disconnect;
-
   $main::lxdebug->leave_sub();
 }