WebshopApi: falsche sql update Abhängigkeit
[kivitendo-erp.git] / SL / RP.pm
index a04351e..016e268 100644 (file)
--- a/SL/RP.pm
+++ b/SL/RP.pm
@@ -39,6 +39,7 @@ use SL::DBUtils;
 use Data::Dumper;
 use SL::DB::Helper::AccountingPeriod qw(get_balance_starting_date);
 use List::Util qw(sum);
+use List::UtilsBy qw(partition_by sort_by);
 use SL::DB;
 
 # use warnings;
@@ -1645,6 +1646,15 @@ sub bwa {
     &get_accounts_g($dbh, $last_period, $kummfromdate, $kummtodate, $form, "pos_bwa");
   }
 
+  my %charts_by_category =
+    partition_by { $_->{pos_bwa} }
+    sort_by      { $_->{accno}   }
+    map          { $form->{charts}->{$_} }
+    keys %{ $form->{charts} };
+  $form->{"charts_by_category"} = \%charts_by_category;
+
+  $form->{category_names} = AM->get_bwa_categories($myconfig, $form);
+
   my @periods        = qw(jetzt kumm);
   my @gesamtleistung = qw(1 3);
   my @gesamtkosten   = qw (10 11 12 13 14 15 16 17 18 20);
@@ -1845,19 +1855,34 @@ sub income_statement {
                   $form, "pos_eur");
 
 
+  # add extra information to form to be used by template
+  my %charts_by_category =
+    partition_by { $_->{pos_eur} }
+    sort_by      { $_->{accno}   }
+    map          { $form->{charts}->{$_} }
+    keys %{ $form->{charts} };
+  $form->{"charts_by_category"} = \%charts_by_category;
+
+  $form->{"categories_income"}  = \@categories_einnahmen;
+  $form->{"categories_expense"} = \@categories_ausgaben;
+
+  $form->{category_names} = AM->get_eur_categories($myconfig, $form);
+
+  my %eur_amounts;
+
   foreach my $item (@categories_einnahmen) {
-    $form->{"eur${item}"} =
-      $form->format_amount($myconfig, $form->round_amount($form->{$item}, 2),2);
+    $eur_amounts{$item} = $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),2);
+    $eur_amounts{$item} = $form->format_amount($myconfig, $form->round_amount($form->{$item}, 2),2);
     $form->{"sumeurb"} += $form->{$item};
   }
 
   $form->{"guvsumme"} = $form->{"sumeura"} - $form->{"sumeurb"};
 
+  $form->{eur_amounts} = \%eur_amounts;
+
   foreach my $item (@ergebnisse) {
     $form->{$item} =
       $form->format_amount($myconfig, $form->round_amount($form->{$item}, 2),2);
@@ -1877,6 +1902,7 @@ sub erfolgsrechnung {
   my %categories = (I => "ERTRAG", E => "AUFWAND");
   my $fromdate = conv_dateq($form->{fromdate});
   my $todate = conv_dateq($form->{todate});
+  my $department_id = conv_i((split /--/, $form->{department})[1], 'NULL');
 
   $form->{total} = 0;
 
@@ -1884,18 +1910,18 @@ sub erfolgsrechnung {
     my %category = (
       name => $categories{$category},
       total => 0,
-      accounts => get_accounts_ch($category),
+      accounts => get_accounts_ch($category)
     );
     foreach my $account (@{$category{accounts}}) {
-      $account->{total} += get_total_ch($account->{id}, $fromdate, $todate);
+      $account->{total} = get_total_ch($department_id, $account->{id}, $fromdate, $todate);
       $category{total} += $account->{total};
-      $account->{total} = $form->format_amount($myconfig, $form->parse_amount($myconfig, $account->{total}), 2);
+      $account->{total} = $form->format_amount($myconfig, $form->round_amount($account->{total}, 2), 2);
     }
     $form->{total} += $category{total};
-    $category{total} = $form->format_amount($myconfig, $form->parse_amount($myconfig, $category{total}), 2);
+    $category{total} = $form->format_amount($myconfig, $form->round_amount($category{total}, 2), 2);
     push(@{$form->{categories}}, \%category);
   }
-  $form->{total} = $form->format_amount($myconfig, $form->parse_amount($myconfig, $form->{total}), 2);
+  $form->{total} = $form->format_amount($myconfig, $form->round_amount($form->{total}, 2), 2);
 
   $main::lxdebug->leave_sub();
   return {};
@@ -1905,7 +1931,7 @@ sub get_accounts_ch {
   $main::lxdebug->enter_sub();
 
   my ($category) = @_;
-  my ($inclusion);
+  my $inclusion = '' ;
 
   if ($category eq 'I') {
     $inclusion = "AND pos_er = NULL OR pos_er = '1'";
@@ -1930,7 +1956,7 @@ sub get_accounts_ch {
 sub get_total_ch {
   $main::lxdebug->enter_sub();
 
-  my ($chart_id, $fromdate, $todate) = @_;
+  my ($department_id, $chart_id, $fromdate, $todate) = @_;
   my $total = 0;
   my $query = qq|
     SELECT SUM(amount)
@@ -1939,7 +1965,16 @@ sub get_total_ch {
       AND transdate >= ?
       AND transdate <= ?
   |;
-  $total += _query($query, $chart_id, $fromdate, $todate)->[0]->{sum};
+  if ($department_id) {
+    $query .= qq| AND COALESCE(
+        (SELECT department_id FROM ar WHERE ar.id=trans_id),
+        (SELECT department_id FROM gl WHERE gl.id=trans_id),
+        (SELECT department_id FROM ap WHERE ap.id=trans_id)
+    ) = ? |;
+    $total += _query($query, $chart_id, $fromdate, $todate, $department_id)->[0]->{sum};
+  } else {
+    $total += _query($query, $chart_id, $fromdate, $todate)->[0]->{sum};
+  }
 
   $main::lxdebug->leave_sub();
   return $total;