GDPDU: acc_trans_id nciht mehr primary key
[kivitendo-erp.git] / SL / SEPA.pm
index f2599a8..b8cdee0 100644 (file)
@@ -8,6 +8,7 @@ use Data::Dumper;
 use SL::DBUtils;
 use SL::DB::Invoice;
 use SL::DB::PurchaseInvoice;
+use SL::DB;
 use SL::Locale::String qw(t8);
 use DateTime;
 
@@ -49,7 +50,7 @@ sub retrieve_open_invoices {
 
        FROM ${arap}
        LEFT JOIN ${vc} vc ON (${arap}.${vc}_id = vc.id)
-       LEFT JOIN (SELECT sei.${arap}_id, SUM(sei.amount) AS amount
+       LEFT JOIN (SELECT sei.${arap}_id, SUM(sei.amount) + SUM(COALESCE(sei.skonto_amount,0)) AS amount
                   FROM sepa_export_items sei
                   LEFT JOIN sepa_export se ON (sei.sepa_export_id = se.id)
                   WHERE NOT se.closed
@@ -87,8 +88,16 @@ sub retrieve_open_invoices {
 }
 
 sub create_export {
+  my ($self, %params) = @_;
   $main::lxdebug->enter_sub();
 
+  my $rc = SL::DB->client->with_transaction(\&_create_export, $self, %params);
+
+  $::lxdebug->leave_sub;
+  return $rc;
+}
+
+sub _create_export {
   my $self     = shift;
   my %params   = @_;
 
@@ -100,7 +109,7 @@ sub create_export {
   my $vc       = $params{vc} eq 'customer' ? 'customer' : 'vendor';
   my $ARAP     = uc $arap;
 
-  my $dbh      = $params{dbh} || $form->get_standard_dbh($myconfig);
+  my $dbh      = $params{dbh} || SL::DB->client->dbh;
 
   my ($export_id) = selectfirst_array_query($form, $dbh, qq|SELECT nextval('sepa_export_id_seq')|);
   my $query       =
@@ -189,10 +198,6 @@ sub create_export {
   $h_insert->finish();
   $h_item_id->finish();
 
-  $dbh->commit() unless ($params{dbh});
-
-  $main::lxdebug->leave_sub();
-
   return $export_id;
 }
 
@@ -267,15 +272,16 @@ sub close_export {
   my $myconfig = \%main::myconfig;
   my $form     = $main::form;
 
-  my $dbh      = $params{dbh} || $form->get_standard_dbh($myconfig);
-
-  my @ids          = ref $params{id} eq 'ARRAY' ? @{ $params{id} } : ($params{id});
-  my $placeholders = join ', ', ('?') x scalar @ids;
-  my $query        = qq|UPDATE sepa_export SET closed = TRUE WHERE id IN ($placeholders)|;
+  SL::DB->client->with_transaction(sub {
+    my $dbh      = $params{dbh} || SL::DB->client->dbh;
 
-  do_query($form, $dbh, $query, map { conv_i($_) } @ids);
+    my @ids          = ref $params{id} eq 'ARRAY' ? @{ $params{id} } : ($params{id});
+    my $placeholders = join ', ', ('?') x scalar @ids;
+    my $query        = qq|UPDATE sepa_export SET closed = TRUE WHERE id IN ($placeholders)|;
 
-  $dbh->commit() unless ($params{dbh});
+    do_query($form, $dbh, $query, map { conv_i($_) } @ids);
+    1;
+  }) or do { die SL::DB->client->error };
 
   $main::lxdebug->leave_sub();
 }
@@ -322,13 +328,24 @@ sub list_exports {
 
   if ($filter->{invnumber}) {
     push @where_sub,  "arap.invnumber ILIKE ?";
-    push @values_sub, '%' . $filter->{invnumber} . '%';
+    push @values_sub, like($filter->{invnumber});
     $joins_sub{$arap} = 1;
   }
 
+  if ($filter->{message_id}) {
+    push @values, like($filter->{message_id});
+    push @where,  <<SQL;
+      se.id IN (
+        SELECT sepa_export_id
+        FROM sepa_export_message_ids
+        WHERE message_id ILIKE ?
+      )
+SQL
+  }
+
   if ($filter->{vc}) {
     push @where_sub,  "vc.name ILIKE ?";
-    push @values_sub, '%' . $filter->{vc} . '%';
+    push @values_sub, like($filter->{vc});
     $joins_sub{$arap} = 1;
     $joins_sub{vc}    = 1;
   }
@@ -370,6 +387,9 @@ sub list_exports {
          (SELECT SUM(sei.amount)
           FROM sepa_export_items sei
           WHERE (sei.sepa_export_id = se.id)) AS sum_amounts,
+         (SELECT string_agg(semi.message_id, ', ')
+          FROM sepa_export_message_ids semi
+          WHERE semi.sepa_export_id = se.id) AS message_ids,
          e.name AS employee
        FROM sepa_export se
        LEFT JOIN (
@@ -388,8 +408,16 @@ sub list_exports {
 }
 
 sub post_payment {
+  my ($self, %params) = @_;
   $main::lxdebug->enter_sub();
 
+  my $rc = SL::DB->client->with_transaction(\&_post_payment, $self, %params);
+
+  $::lxdebug->leave_sub;
+  return $rc;
+}
+
+sub _post_payment {
   my $self     = shift;
   my %params   = @_;
 
@@ -402,7 +430,7 @@ sub post_payment {
   my $mult     = $params{vc} eq 'customer' ? -1         : 1;
   my $ARAP     = uc $arap;
 
-  my $dbh      = $params{dbh} || $form->get_standard_dbh($myconfig);
+  my $dbh      = $params{dbh} || SL::DB->client->dbh;
 
   my @items    = ref $params{items} eq 'ARRAY' ? @{ $params{items} } : ($params{items});
 
@@ -488,9 +516,7 @@ sub post_payment {
 
   map { $_->[0]->finish() } values %handles;
 
-  $dbh->commit() unless ($params{dbh});
-
-  $main::lxdebug->leave_sub();
+  return 1;
 }
 
 1;