Locales für -r4165
[kivitendo-erp.git] / SL / RP.pm
index ad8be97..8ea8f4f 100644 (file)
--- a/SL/RP.pm
+++ b/SL/RP.pm
@@ -37,8 +37,8 @@ package RP;
 use SL::DBUtils;
 use Data::Dumper;
 use List::Util qw(sum);
-use strict;
-use warnings;
+use strict;
+use warnings;
 
 
 # new implementation of balance sheet
@@ -669,6 +669,19 @@ sub trial_balance {
   }
 
   if ($options{beginning_balances}) {
+    foreach my $prefix (qw(from to)) {
+      next if ($form->{"${prefix}date"});
+
+      my $min_max = $prefix eq 'from' ? 'min' : 'max';
+      $query      = qq|SELECT ${min_max}(transdate)
+                       FROM acc_trans ac
+                       $dpt_join
+                       WHERE (1 = 1)
+                         $dpt_where
+                         $project|;
+      ($form->{"${prefix}date"}) = selectfirst_array_query($form, $dbh, $query);
+    }
+
     # get beginning balances
     $query =
       qq|SELECT c.accno, c.category, SUM(ac.amount) AS amount, c.description
@@ -687,6 +700,7 @@ sub trial_balance {
       if ($ref->{amount} != 0 || $form->{all_accounts}) {
         $trb{ $ref->{accno} }{description} = $ref->{description};
         $trb{ $ref->{accno} }{charttype}   = 'A';
+        $trb{ $ref->{accno} }{beginning_balance} = $ref->{amount};
 
         if ($ref->{amount} > 0) {
           $trb{ $ref->{accno} }{haben_eb}   = $ref->{amount};
@@ -928,7 +942,7 @@ sub trial_balance {
          WHERE $saldowhere
            $dpt_where
            $project
-         AND c.accno = ?) AS saldo,
+         AND c.accno = ? AND (NOT ac.ob_transaction OR ac.ob_transaction IS NULL)) AS saldo,
 
         (SELECT SUM(ac.amount)
          FROM acc_trans ac
@@ -996,7 +1010,7 @@ sub trial_balance {
          WHERE $saldowhere
            $dpt_where
            $project
-         AND c.accno = ?) AS saldo,
+         AND c.accno = ? AND (NOT ac.ob_transaction OR ac.ob_transaction IS NULL)) AS saldo,
 
         (SELECT SUM(ac.amount)
          FROM acc_trans ac
@@ -1039,7 +1053,7 @@ sub trial_balance {
 
     $ref->{accno} = $accno;
     map { $ref->{$_} = $trb{$accno}{$_} }
-      qw(description category charttype amount soll_eb haben_eb);
+      qw(description category charttype amount soll_eb haben_eb beginning_balance);
 
     $ref->{balance} = $form->round_amount($balance{ $ref->{accno} }, 2);
 
@@ -1087,7 +1101,21 @@ sub trial_balance {
 
       $ref->{debit}  = $form->round_amount($ref->{debit},  2);
       $ref->{credit} = $form->round_amount($ref->{credit}, 2);
-      $ref->{haben_saldo}  = $form->round_amount($ref->{haben_saldo},  2);
+
+      if ($ref->{haben_saldo} != 0) {
+        $ref->{haben_saldo}  = $ref->{haben_saldo} + $ref->{beginning_balance};
+        if ($ref->{haben_saldo} < 0) {
+          $ref->{soll_saldo} = $form->round_amount(($ref->{haben_saldo} *- 1), 2);
+          $ref->{haben_saldo} = 0;
+        }
+      } elsif ($ref->{soll_saldo} != 0) {
+        $ref->{soll_saldo} = $ref->{soll_saldo} - $ref->{beginning_balance};
+        if ($ref->{soll_saldo} < 0) {
+          $ref->{haben_saldo} = $form->round_amount(($ref->{haben_saldo} * -1), 2);
+          $ref->{soll_saldo} = 0;
+        }
+     }
+      $ref->{haben_saldo} = $form->round_amount($ref->{haben_saldo}, 2);
       $ref->{soll_saldo} = $form->round_amount($ref->{soll_saldo}, 2);
       $ref->{haben_kumuliert}  = $form->round_amount($ref->{haben_kumuliert},  2);
       $ref->{soll_kumuliert} = $form->round_amount($ref->{soll_kumuliert}, 2);
@@ -1617,7 +1645,7 @@ sub bwa {
   }
 
   my @periods        = qw(jetzt kumm);
-  my @gesamtleistung = qw(1 3);
+  my @gesamtleistung = qw(1 3);
   my @gesamtkosten   = qw (10 11 12 13 14 15 16 17 18 19 20);
   my @ergebnisse     =
     qw (rohertrag betriebrohertrag betriebsergebnis neutraleraufwand neutralerertrag ergebnisvorsteuern ergebnis gesamtleistung gesamtkosten);
@@ -1640,6 +1668,8 @@ sub bwa {
     foreach my $item (@gesamtleistung) {
       $form->{ "$key" . "gesamtleistung" } += $form->{$item}{$key};
     }
+    $form->{ "$key" . "gesamtleistung" } -= $form->{2}{$key};
+
     foreach my $item (@gesamtkosten) {
       $form->{ "$key" . "gesamtkosten" } += $form->{$item}{$key};
     }
@@ -1892,28 +1922,20 @@ sub income_statement {
 
   $form->{decimalplaces} *= 1;
 
-  foreach my $item (@categories_einnahmen) {
-    $form->{$item} = 0;
-  }
-  foreach my $item (@categories_ausgaben) {
-    $form->{$item} = 0;
-  }
 
-  foreach my $item (@ergebnisse) {
-    $form->{$item} = 0;
-  }
 
   &get_accounts_g($dbh, $last_period, $form->{fromdate}, $form->{todate},
                   $form, "pos_eur");
 
+
   foreach my $item (@categories_einnahmen) {
     $form->{"eur${item}"} =
-      $form->format_amount($myconfig, $form->round_amount($form->{$item}, 2));
+      $form->format_amount($myconfig, $form->round_amount($form->{$item}, 2),2);
     $form->{"sumeura"} += $form->{$item};
   }
   foreach my $item (@categories_ausgaben) {
     $form->{"eur${item}"} =
-      $form->format_amount($myconfig, $form->round_amount($form->{$item}, 2));
+      $form->format_amount($myconfig, $form->round_amount($form->{$item}, 2),2);
     $form->{"sumeurb"} += $form->{$item};
   }
 
@@ -1921,7 +1943,7 @@ sub income_statement {
 
   foreach my $item (@ergebnisse) {
     $form->{$item} =
-      $form->format_amount($myconfig, $form->round_amount($form->{$item}, 2));
+      $form->format_amount($myconfig, $form->round_amount($form->{$item}, 2),2);
   }
   $main::lxdebug->leave_sub();
 }