Fix für Bug 1081. Bei Buchung einer Einkaufsrechnung geht das Rabatt verloren. 1...
[kivitendo-erp.git] / SL / RP.pm
index 72bbcff..5f04b99 100644 (file)
--- a/SL/RP.pm
+++ b/SL/RP.pm
@@ -688,7 +688,7 @@ sub trial_balance {
           FROM acc_trans ac
           LEFT JOIN chart c ON (ac.chart_id = c.id)
           $dpt_join
-          WHERE ((select date_trunc('year', ac.transdate::date)) = (select date_trunc('year', ?::date))) AND ac.ob_transaction $acc_cash_where
+          WHERE ((select date_trunc('year', ac.transdate::date)) = (select date_trunc('year', ?::date))) AND ac.ob_transaction
             $dpt_where
             $project
           GROUP BY c.accno, c.category, c.description |;
@@ -747,23 +747,23 @@ sub trial_balance {
 
   if ($form->{fromdate} || $form->{todate}) {
     if ($form->{fromdate}) {
-      my $fromdate = conv_dateq($form->{fromdate});
+      $fromdate = conv_dateq($form->{fromdate});
       $tofrom        .= " AND (ac.transdate >= $fromdate)";
-      $subwhere      .= " AND (transdate >= $fromdate)";
-      $sumsubwhere   .= " AND (transdate >= (select date_trunc('year', date $fromdate))) ";
-      $saldosubwhere .= " AND transdate>=(select date_trunc('year', date $fromdate))  ";
+      $subwhere      .= " AND (ac.transdate >= $fromdate)";
+      $sumsubwhere   .= " AND (ac.transdate >= (select date_trunc('year', date $fromdate))) ";
+      $saldosubwhere .= " AND (ac,transdate>=(select date_trunc('year', date $fromdate)))  ";
       $invwhere      .= " AND (a.transdate >= $fromdate)";
       $glsaldowhere  .= " AND ac.transdate>=(select date_trunc('year', date $fromdate)) ";
       $glwhere        = " AND (ac.transdate >= $fromdate)";
       $glsumwhere     = " AND (ac.transdate >= (select date_trunc('year', date $fromdate))) ";
     }
     if ($form->{todate}) {
-      my $todate = conv_dateq($form->{todate});
+      $todate = conv_dateq($form->{todate});
       $tofrom        .= " AND (ac.transdate <= $todate)";
       $invwhere      .= " AND (a.transdate <= $todate)";
-      $saldosubwhere .= " AND (transdate <= $todate)";
-      $sumsubwhere   .= " AND (transdate <= $todate)";
-      $subwhere      .= " AND (transdate <= $todate)";
+      $saldosubwhere .= " AND (ac.transdate <= $todate)";
+      $sumsubwhere   .= " AND (ac.transdate <= $todate)";
+      $subwhere      .= " AND (ac.transdate <= $todate)";
       $glwhere       .= " AND (ac.transdate <= $todate)";
       $glsumwhere    .= " AND (ac.transdate <= $todate) ";
       $glsaldowhere  .= " AND (ac.transdate <= $todate) ";
@@ -772,84 +772,10 @@ sub trial_balance {
 
   if ($form->{method} eq "cash") {
     $where .=
-      qq| AND ((ac.trans_id IN (SELECT id from ar) AND
-                ac.trans_id IN
-                  (
-                    SELECT trans_id
-                    FROM acc_trans
-                    JOIN chart ON (chart_id = id)
-                    WHERE (link LIKE '%AR_paid%')
-                      $subwhere
-                  )
-               )
-               OR
-               (ac.trans_id in (SELECT id from ap) AND
-                ac.trans_id IN
-                  (
-                    SELECT trans_id
-                    FROM acc_trans
-                    JOIN chart ON (chart_id = id)
-                    WHERE (link LIKE '%AP_paid%')
-                      $subwhere
-                  )
-               )
-               OR
-               (ac.trans_id in (SELECT id from gl)
-                $glwhere)
-              )|;
-    $saldowhere .=
-      qq| AND ((ac.trans_id IN (SELECT id from ar) AND
-                ac.trans_id IN
-                  (
-                    SELECT trans_id
-                    FROM acc_trans
-                    JOIN chart ON (chart_id = id)
-                    WHERE (link LIKE '%AR_paid%')
-                      $saldosubwhere
-                  )
-               )
-               OR
-               (ac.trans_id in (SELECT id from ap) AND
-                ac.trans_id IN
-                  (
-                    SELECT trans_id
-                    FROM acc_trans
-                    JOIN chart ON (chart_id = id)
-                    WHERE (link LIKE '%AP_paid%')
-                      $saldosubwhere
-                  )
-               )
-               OR
-               (ac.trans_id in (SELECT id from gl)
-                $glsaldowhere)
-              )|;
-    $sumwhere .=
-      qq| AND ((ac.trans_id IN (SELECT id from ar) AND
-                ac.trans_id IN
-                  (
-                    SELECT trans_id
-                    FROM acc_trans
-                    JOIN chart ON (chart_id = id)
-                    WHERE (link LIKE '%AR_paid%')
-                      $sumsubwhere
-                  )
-               )
-               OR
-               (ac.trans_id in (SELECT id from ap) AND
-                ac.trans_id IN
-                  (
-                    SELECT trans_id
-                    FROM acc_trans
-                    JOIN chart ON (chart_id = id)
-                    WHERE (link LIKE '%AP_paid%')
-                      $sumsubwhere
-                  )
-               )
-               OR
-               (ac.trans_id in (SELECT id from gl)
-                $glsumwhere)
-              )|;
-
+      qq| AND(ac.trans_id IN (SELECT id FROM ar WHERE datepaid>= $fromdate AND datepaid<= $todate UNION SELECT id FROM ap WHERE datepaid>= $fromdate AND datepaid<= $todate UNION SELECT id FROM gl WHERE transdate>= $fromdate AND transdate<= $todate)) AND (NOT ac.ob_transaction OR ac.ob_transaction IS NULL) AND (NOT ac.cb_transaction OR ac.cb_transaction IS NULL) |;
+    $saldowhere .= qq| AND(ac.trans_id IN (SELECT id FROM ar WHERE datepaid>= $fromdate AND datepaid<= $todate UNION SELECT id FROM ap WHERE datepaid>= $fromdate AND datepaid<= $todate UNION SELECT id FROM gl WHERE transdate>= $fromdate AND transdate<= $todate))  AND (NOT ac.cb_transaction OR ac.cb_transaction IS NULL) |;
+      
+    $sumwhere .= qq| AND(ac.trans_id IN (SELECT id FROM ar WHERE datepaid>= $fromdate AND datepaid<= $todate UNION SELECT id FROM ap WHERE datepaid>= $fromdate AND datepaid<= $todate UNION SELECT id FROM gl WHERE transdate>= $fromdate AND transdate<= $todate)) AND (NOT ac.ob_transaction OR ac.ob_transaction IS NULL) AND (NOT ac.cb_transaction OR ac.cb_transaction IS NULL) |;
   } else {
     $where .= $tofrom . " AND (NOT ac.ob_transaction OR ac.ob_transaction IS NULL) AND (NOT ac.cb_transaction OR ac.cb_transaction IS NULL)";
     $saldowhere .= $glsaldowhere . " AND (NOT ac.cb_transaction OR ac.cb_transaction IS NULL)";
@@ -1108,10 +1034,10 @@ sub trial_balance {
           $ref->{soll_saldo} = $form->round_amount(($ref->{haben_saldo} *- 1), 2);
           $ref->{haben_saldo} = 0;
         }
-      } elsif ($ref->{soll_saldo} != 0) {
+      } else {
         $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->{haben_saldo} = $form->round_amount(($ref->{soll_saldo} * -1), 2);
           $ref->{soll_saldo} = 0;
         }
      }
@@ -1922,28 +1848,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};
   }
 
@@ -1951,7 +1869,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();
 }