Storno Fix nr. 29283574983745
authorSven Schöling <s.schoeling@linet-services.de>
Thu, 14 Jun 2007 14:51:14 +0000 (14:51 +0000)
committerSven Schöling <s.schoeling@linet-services.de>
Thu, 14 Jun 2007 14:51:14 +0000 (14:51 +0000)
Es werden beim Storno jetzt nur noch die urspruenglichen acc_trans Eintraege storniert,
nachtraegliche Zahlungseingaenge bleiben unberuehrt.

SL/AP.pm
SL/AR.pm

index edd42c0..2da4eca 100644 (file)
--- a/SL/AP.pm
+++ b/SL/AP.pm
@@ -776,9 +776,16 @@ sub storno {
   do_query($form, $dbh, $query, $id);
 
   # now copy acc_trans entries
-  $query = qq|SELECT * FROM acc_trans WHERE trans_id = ?|;
-  for my $row (@{ selectall_hashref_query($form, $dbh, $query, $id) }) {
-    delete @$row{qw(itime mtime)};
+  $query = qq|SELECT a.*, c.link FROM acc_trans a LEFT JOIN chart c ON a.chart_id = c.id WHERE a.trans_id = ?|;
+  my $rowref = selectall_hashref_query($form, $dbh, $query, $id); 
+
+  # kill all entries containing payments, which are the last 2n rows, of which the last has link =~ /paid/
+  while ($rowref->[-1]{link} =~ /paid/) {
+    splice(@$rowref, -2);
+  }
+
+  for my $row (@$rowref) {
+    delete @$row{qw(itime mtime link)};
     $query = sprintf 'INSERT INTO acc_trans (%s) VALUES (%s)', join(', ', keys %$row), join(', ', map '?', values %$row);
     $row->{trans_id}   = $new_id;
     $row->{amount}    *= -1;
index 926a1b6..96547c5 100644 (file)
--- a/SL/AR.pm
+++ b/SL/AR.pm
@@ -645,9 +645,16 @@ sub storno {
   do_query($form, $dbh, $query, $id);
 
   # now copy acc_trans entries
-  $query = qq|SELECT * FROM acc_trans WHERE trans_id = ?|;
-  for my $row (@{ selectall_hashref_query($form, $dbh, $query, $id) }) {
-    delete @$row{qw(itime mtime)};
+  $query = qq|SELECT a.*, c.link FROM acc_trans a LEFT JOIN chart c ON a.chart_id = c.id WHERE a.trans_id = ?|;
+  my $rowref = selectall_hashref_query($form, $dbh, $query, $id); 
+
+  # kill all entries containing payments, which are the last 2n rows, of which the last has link =~ /paid/
+  while ($rowref->[-1]{link} =~ /paid/) {
+    splice(@$rowref, -2);
+  }
+
+  for my $row (@$rowref) {
+    delete @$row{qw(itime mtime link)};
     $query = sprintf 'INSERT INTO acc_trans (%s) VALUES (%s)', join(', ', keys %$row), join(', ', map '?', values %$row);
     $row->{trans_id}   = $new_id;
     $row->{amount}    *= -1;