und das ganze nochmal für Kreditorenbuchungen und deren Stornos
authorSven Schöling <s.schoeling@linet-services.de>
Wed, 13 Jun 2007 18:24:24 +0000 (18:24 +0000)
committerSven Schöling <s.schoeling@linet-services.de>
Wed, 13 Jun 2007 18:24:24 +0000 (18:24 +0000)
SL/AP.pm
bin/mozilla/ap.pl

index 3bd658c..edd42c0 100644 (file)
--- a/SL/AP.pm
+++ b/SL/AP.pm
@@ -745,5 +745,50 @@ sub setup_form {
   $main::lxdebug->leave_sub();
 }
 
+sub storno {
+  $main::lxdebug->enter_sub();
+
+  my ($self, $form, $myconfig, $id) = @_;
+
+  my ($query, $new_id, $storno_row, $acc_trans_rows);
+  my $dbh = $form->get_standard_dbh($myconfig);
+
+  $query = qq|SELECT nextval('glid')|;
+  ($new_id) = selectrow_query($form, $dbh, $query);
+
+  $query = qq|SELECT * FROM ap WHERE id = ?|;
+  $storno_row = selectfirst_hashref_query($form, $dbh, $query, $id);
+
+  $storno_row->{id}         = $new_id;
+  $storno_row->{storno_id}  = $id;
+  $storno_row->{storno}     = 't';
+  $storno_row->{invnumber}  = 'Storno-' . $storno_row->{invnumber};
+  $storno_row->{amount}    *= -1;
+  $storno_row->{netamount} *= -1;
+  $storno_row->{paid}       = $storno_amount->{amount};
+
+  delete @$storno_row{qw(itime mtime)};
+
+  $query = sprintf 'INSERT INTO ap (%s) VALUES (%s)', join(', ', keys %$storno_row), join(', ', map '?', values %$storno_row);
+  do_query($form, $dbh, $query, (values %$storno_row));
+
+  $query = qq|UPDATE ap SET paid = amount + paid, storno = 't' WHERE id = ?|;
+  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 = sprintf 'INSERT INTO acc_trans (%s) VALUES (%s)', join(', ', keys %$row), join(', ', map '?', values %$row);
+    $row->{trans_id}   = $new_id;
+    $row->{amount}    *= -1;
+    do_query($form, $dbh, $query, (values %$row));
+  }
+
+  $dbh->commit;
+
+  $main::lxdebug->leave_sub();
+}
+
 1;
 
index 1b2f652..2110042 100644 (file)
@@ -1497,26 +1497,7 @@ sub storno {
     $form->error($locale->text("Transaction has already been cancelled!"));
   }
 
-  # negate amount/taxes
-  for my $i (1 .. $form->{rowcount}) {
-    $form->{"amount_$i"} *= -1;
-    $form->{"tax_$i"}    *= -1; 
-  }
-
-  # format things
-  for my $i (1 .. $form->{rowcount}) {
-    for (qw(amount tax)) {
-      $form->{"${_}_$i"} = $form->format_amount(\%myconfig, $form->{"${_}_$i"}, 2) if $form->{"${_}_$i"};
-    }
-  }
-
-  $form->{storno}      = 1;
-  $form->{storno_id}   = $form->{id};
-  $form->{id}          = 0;
-
-  $form->{invnumber}   = "Storno-" . $form->{invnumber};
-
-  post();
+  AP->storno($form, \%myconfig, $form->{id});
 
   # saving the history
   if(!exists $form->{addition} && $form->{id} ne "") {
@@ -1526,5 +1507,7 @@ sub storno {
   }
   # /saving the history 
 
+  $form->redirect(sprintf $locale->text("Transaction %d cancelled."), $form->{storno_id}); 
+
   $lxdebug->leave_sub();
 }