Einkaufsrechnungen: Suche nach Artikelnummer/-beschreibung in Positionen
[kivitendo-erp.git] / SL / AP.pm
index f551b34..92dc733 100644 (file)
--- a/SL/AP.pm
+++ b/SL/AP.pm
@@ -39,6 +39,7 @@ use SL::DBUtils;
 use SL::IO;
 use SL::MoreCommon;
 use SL::DB::Default;
+use SL::Util qw(trim);
 use Data::Dumper;
 
 use strict;
@@ -148,6 +149,8 @@ sub post_transaction {
                   $form->{id});
     do_query($form, $dbh, $query, @values);
 
+    $form->new_lastmtime('ap');
+
     # add individual transactions
     for my $i (1 .. $form->{rowcount}) {
       if ($form->{"amount_$i"} != 0) {
@@ -349,6 +352,7 @@ sub post_transaction {
   if ($payments_only) {
     $query = qq|UPDATE ap SET paid = ?, datepaid = ? WHERE id = ?|;
     do_query($form, $dbh, $query,  $form->{invpaid}, $form->{invpaid} ? conv_date($form->{datepaid}) : undef, conv_i($form->{id}));
+    $form->new_lastmtime('ap');
   }
 
   IO->set_datepaid(table => 'ap', id => $form->{id}, dbh => $dbh);
@@ -450,11 +454,11 @@ sub ap_transactions {
     push(@values, $form->{vendor_id});
   } elsif ($form->{vendor}) {
     $where .= " AND v.name ILIKE ?";
-    push(@values, $form->like($form->{vendor}));
+    push(@values, like($form->{vendor}));
   }
   if ($form->{"cp_name"}) {
     $where .= " AND (cp.cp_name ILIKE ? OR cp.cp_givenname ILIKE ?)";
-    push(@values, ('%' . $form->{"cp_name"} . '%')x2);
+    push(@values, (like($form->{"cp_name"}))x2);
   }
   if ($form->{department}) {
     # ähnlich wie commit 0bbfb33b6aa8e38bb6c81d1684ab7d08e5b5c5af abteilung
@@ -466,15 +470,15 @@ sub ap_transactions {
   }
   if ($form->{invnumber}) {
     $where .= " AND a.invnumber ILIKE ?";
-    push(@values, $form->like($form->{invnumber}));
+    push(@values, like($form->{invnumber}));
   }
   if ($form->{ordnumber}) {
     $where .= " AND a.ordnumber ILIKE ?";
-    push(@values, $form->like($form->{ordnumber}));
+    push(@values, like($form->{ordnumber}));
   }
   if ($form->{notes}) {
     $where .= " AND lower(a.notes) LIKE ?";
-    push(@values, $form->like($form->{notes}));
+    push(@values, like($form->{notes}));
   }
   if ($form->{project_id}) {
     $where .=
@@ -490,11 +494,11 @@ sub ap_transactions {
 
   if ($form->{transdatefrom}) {
     $where .= " AND a.transdate >= ?";
-    push(@values, $form->{transdatefrom});
+    push(@values, trim($form->{transdatefrom}));
   }
   if ($form->{transdateto}) {
     $where .= " AND a.transdate <= ?";
-    push(@values, $form->{transdateto});
+    push(@values, trim($form->{transdateto}));
   }
   if ($form->{open} || $form->{closed}) {
     unless ($form->{open} && $form->{closed}) {
@@ -503,6 +507,33 @@ sub ap_transactions {
     }
   }
 
+  if ($form->{parts_partnumber}) {
+    $where .= <<SQL;
+      AND EXISTS (
+        SELECT invoice.trans_id
+        FROM invoice
+        LEFT JOIN parts ON (invoice.parts_id = parts.id)
+        WHERE (invoice.trans_id = a.id)
+          AND (parts.partnumber ILIKE ?)
+        LIMIT 1
+      )
+SQL
+    push @values, like($form->{parts_partnumber});
+  }
+
+  if ($form->{parts_description}) {
+    $where .= <<SQL;
+      AND EXISTS (
+        SELECT invoice.trans_id
+        FROM invoice
+        WHERE (invoice.trans_id = a.id)
+          AND (invoice.description ILIKE ?)
+        LIMIT 1
+      )
+SQL
+    push @values, like($form->{parts_description});
+  }
+
   if ($where) {
     substr($where, 0, 4, " WHERE ");
     $query .= $where;
@@ -808,6 +839,8 @@ sub storno {
   $query = qq|UPDATE ap SET paid = amount + paid, storno = 't' WHERE id = ?|;
   do_query($form, $dbh, $query, $id);
 
+  $form->new_lastmtime('ap') if $id == $form->{id};
+
   # now copy acc_trans entries
   $query = qq|SELECT a.*, c.link FROM acc_trans a LEFT JOIN chart c ON a.chart_id = c.id WHERE a.trans_id = ? ORDER BY a.acc_trans_id|;
   my $rowref = selectall_hashref_query($form, $dbh, $query, $id);