Bilanzfehler bei Wechselkursbuchungen
authorNiclas Zimmermann <niclas@lx-office-hosting.de>
Thu, 20 Sep 2012 13:42:57 +0000 (15:42 +0200)
committerNiclas Zimmermann <niclas@lx-office-hosting.de>
Thu, 20 Sep 2012 13:54:56 +0000 (15:54 +0200)
Wenn man Rechnungen (die Fremdwährungen nutzen) bezahlt hat, wurden
Gewinne/Verluste durch mögliche Kurswechsel bei Zahlungsbuchungen
nicht weiter berücksichtigt. Dadurch kam es zu Bilanzfehlern im
Buchungsjournal.

Das return bei payments_only wird jetzt erst nach den Wechselkurs-
buchungen ausgeführt.

Project_id wurde durch ein conv_i gekapselt.

SL/IS.pm

index 22080c7..82226ee 100644 (file)
--- a/SL/IS.pm
+++ b/SL/IS.pm
@@ -933,18 +933,16 @@ sub post_invoice {
 
       # exchangerate difference
       $form->{fx}{$accno}{ $form->{"datepaid_$i"} } +=
-      $form->{"paid_$i"} * ($form->{"exchangerate_$i"} - 1) + $diff;
+        $form->{"paid_$i"} * ($form->{"exchangerate_$i"} - 1) + $diff;
 
       # gain/loss
       $amount =
-      $form->{"paid_$i"} * $form->{exchangerate} - $form->{"paid_$i"} *
-      $form->{"exchangerate_$i"};
+        $form->{"paid_$i"} * $form->{exchangerate} - $form->{"paid_$i"} *
+        $form->{"exchangerate_$i"};
       if ($amount > 0) {
-        $form->{fx}{ $form->{fxgain_accno} }{ $form->{"datepaid_$i"} } +=
-        $amount;
+        $form->{fx}{ $form->{fxgain_accno} }{ $form->{"datepaid_$i"} } += $amount;
       } else {
-        $form->{fx}{ $form->{fxloss_accno} }{ $form->{"datepaid_$i"} } +=
-        $amount;
+        $form->{fx}{ $form->{fxloss_accno} }{ $form->{"datepaid_$i"} } += $amount;
       }
 
       $diff = 0;
@@ -963,35 +961,32 @@ sub post_invoice {
 
   IO->set_datepaid(table => 'ar', id => $form->{id}, dbh => $dbh);
 
-  if ($payments_only) {
-    $query = qq|UPDATE ar SET paid = ? WHERE id = ?|;
-    do_query($form, $dbh, $query,  $form->{paid}, conv_i($form->{id}));
-
-    $dbh->commit if !$provided_dbh;
-
-    $main::lxdebug->leave_sub();
-    return;
-  }
-
   # record exchange rate differences and gains/losses
   foreach my $accno (keys %{ $form->{fx} }) {
     foreach my $transdate (keys %{ $form->{fx}{$accno} }) {
-      if (
-          ($form->{fx}{$accno}{$transdate} =
-           $form->round_amount($form->{fx}{$accno}{$transdate}, 2)
-          ) != 0
-        ) {
+      $form->{fx}{$accno}{$transdate} = $form->round_amount($form->{fx}{$accno}{$transdate}, 2);
+      if ( $form->{fx}{$accno}{$transdate} != 0 ) {
 
         $query =
           qq|INSERT INTO acc_trans (trans_id, chart_id, amount, transdate, cleared, fx_transaction, taxkey, project_id)
              VALUES (?, (SELECT id FROM chart WHERE accno = ?), ?, ?, '0', '1',
              (SELECT taxkey_id FROM chart WHERE accno = ?), ?)|;
-        @values = (conv_i($form->{"id"}), $accno, $form->{fx}{$accno}{$transdate}, conv_date($transdate), $accno, $project_id);
+        @values = (conv_i($form->{"id"}), $accno, $form->{fx}{$accno}{$transdate}, conv_date($transdate), $accno, conv_i($project_id));
         do_query($form, $dbh, $query, @values);
       }
     }
   }
 
+  if ($payments_only) {
+    $query = qq|UPDATE ar SET paid = ? WHERE id = ?|;
+    do_query($form, $dbh, $query,  $form->{paid}, conv_i($form->{id}));
+
+    $dbh->commit if !$provided_dbh;
+
+    $main::lxdebug->leave_sub();
+    return;
+  }
+
   $amount = $netamount + $tax;
 
   # save AR record