flash unter Header in Projekten
[kivitendo-erp.git] / SL / RP.pm
index b6661b5..c4a9503 100644 (file)
--- a/SL/RP.pm
+++ b/SL/RP.pm
@@ -211,13 +211,25 @@ sub get_accounts {
 
   $sth->finish;
 
+  # filter for opening and closing bookings
   # if l_ob is selected l_cb is always ignored
-  if ( $form->{l_ob} ) {
-    $where .= ' AND ac.ob_transaction is true  '
-  } elsif ( not $form->{l_cb} ) {
-    $where .= ' AND ac.cb_transaction is false ';
+  if ( $last_period ) {
+    # ob/cb-settings for "compared to" balance
+    if ( $form->{l_ob_compared} ) {
+      $where .= ' AND ac.ob_transaction is true  '
+    } elsif ( not $form->{l_cb_compared} ) {
+      $where .= ' AND ac.cb_transaction is false ';
+    };
+  } else {
+    # ob/cb-settings for "as of" balance
+    if ( $form->{l_ob} ) {
+      $where .= ' AND ac.ob_transaction is true  '
+    } elsif ( not $form->{l_cb} ) {
+      $where .= ' AND ac.cb_transaction is false ';
+    };
   };
 
+
   if ($fromdate) {
     $fromdate = conv_dateq($fromdate);
     if ($form->{method} eq 'cash') {
@@ -257,8 +269,7 @@ sub get_accounts {
              (
                SELECT trans_id
                FROM acc_trans a
-               JOIN chart c ON (a.chart_id = c.id)
-               WHERE (link LIKE '%AR_paid%')
+               WHERE (a.chart_link LIKE '%AR_paid%')
                $subwhere
              )
            $project
@@ -277,8 +288,7 @@ sub get_accounts {
              (
                SELECT trans_id
                FROM acc_trans a
-               JOIN chart c ON (a.chart_id = c.id)
-               WHERE (link LIKE '%AP_paid%')
+               WHERE (a.chart_link LIKE '%AP_paid%')
                $subwhere
              )
            $project
@@ -294,7 +304,7 @@ sub get_accounts {
            $glwhere
            $dpt_where
            $category
-             AND NOT ((c.link = 'AR') OR (c.link = 'AP'))
+             AND NOT ((ac.chart_link = 'AR') OR (ac.chart_link = 'AP'))
            $project
          GROUP BY c.accno, c.description, c.category |;
 
@@ -317,8 +327,7 @@ sub get_accounts {
              (
                SELECT trans_id
                FROM acc_trans a
-               JOIN chart c ON (a.chart_id = c.id)
-               WHERE (link LIKE '%AR_paid%')
+               WHERE (a.chart_link LIKE '%AR_paid%')
                $subwhere
              )
            $project
@@ -338,8 +347,7 @@ sub get_accounts {
              (
                SELECT trans_id
                FROM acc_trans a
-               JOIN chart c ON (a.chart_id = c.id)
-               WHERE link LIKE '%AP_paid%'
+               WHERE a.chart_link LIKE '%AP_paid%'
                $subwhere
              )
            $project
@@ -512,8 +520,9 @@ sub get_accounts_g {
             /* ar amount is not zero, so we can divide by amount   */
                     (SELECT SUM(acc.amount) * -1
                      FROM acc_trans acc
-                     INNER JOIN chart c ON (acc.chart_id = c.id AND c.link LIKE '%AR_paid%')
-                     WHERE 1=1 $inwhere AND acc.trans_id = ac.trans_id)
+                     WHERE 1=1 $inwhere
+                     AND acc.trans_id = ac.trans_id
+                     AND acc.chart_link LIKE '%AR_paid%')
                   / (SELECT amount FROM ar WHERE id = ac.trans_id)
             ELSE 0
             /* ar amount is zero, or we are checking with a non-ar-transaction, so we return 0 in both cases as multiplicator of ac.amount */
@@ -522,13 +531,6 @@ sub get_accounts_g {
        FROM acc_trans ac
        LEFT JOIN chart c ON (c.id  = ac.chart_id)
        LEFT JOIN ar      ON (ar.id = ac.trans_id)
-       LEFT JOIN taxkeys tk ON (tk.id = (
-                                  SELECT id FROM taxkeys
-                                  WHERE chart_id = ac.chart_id
-                                  AND startdate <= COALESCE(ar.deliverydate,ar.transdate)
-                                  ORDER BY startdate DESC LIMIT 1
-                                  )
-                                )
       WHERE ac.trans_id IN (SELECT DISTINCT trans_id FROM acc_trans WHERE 1=1 $subwhere)
 
       GROUP BY c.$category
@@ -539,7 +541,7 @@ sub get_accounts_g {
          JOIN chart c ON (c.id = ac.chart_id)
          JOIN ar a ON (a.id = ac.trans_id)
          WHERE $where $dpt_where
-           AND ac.trans_id IN ( SELECT trans_id FROM acc_trans a JOIN chart c ON (a.chart_id = c.id) WHERE (link LIKE '%AR_paid%') $subwhere)
+           AND ac.trans_id IN ( SELECT trans_id FROM acc_trans a WHERE (a.chart_link LIKE '%AR_paid%') $subwhere)
            $project
          GROUP BY c.$category
 */
@@ -550,7 +552,7 @@ sub get_accounts_g {
          JOIN chart c ON (c.id = ac.chart_id)
          JOIN ap a ON (a.id = ac.trans_id)
          WHERE $where $dpt_where
-           AND ac.trans_id IN ( SELECT trans_id FROM acc_trans a JOIN chart c ON (a.chart_id = c.id) WHERE (link LIKE '%AP_paid%') $subwhere)
+           AND ac.trans_id IN ( SELECT trans_id FROM acc_trans a WHERE (a.chart_link LIKE '%AP_paid%') $subwhere)
            $project
          GROUP BY c.$category
 
@@ -561,7 +563,7 @@ sub get_accounts_g {
          JOIN chart c ON (c.id = ac.chart_id)
          JOIN gl a ON (a.id = ac.trans_id)
          WHERE $where $dpt_where $glwhere
-           AND NOT ((c.link = 'AR') OR (c.link = 'AP'))
+           AND NOT ((ac.chart_link = 'AR') OR (ac.chart_link = 'AP'))
            $project
          GROUP BY c.$category
         |;
@@ -576,7 +578,7 @@ sub get_accounts_g {
          JOIN parts p ON (ac.parts_id = p.id)
          JOIN chart c on (p.income_accno_id = c.id)
          WHERE (c.category = 'I') $prwhere $dpt_where
-           AND ac.trans_id IN ( SELECT trans_id FROM acc_trans a JOIN chart c ON (a.chart_id = c.id) WHERE (link LIKE '%AR_paid%') $subwhere)
+           AND ac.trans_id IN ( SELECT trans_id FROM acc_trans a WHERE (a.chart_link LIKE '%AR_paid%') $subwhere)
            $project
          GROUP BY c.$category
 
@@ -588,7 +590,7 @@ sub get_accounts_g {
          JOIN parts p ON (ac.parts_id = p.id)
          JOIN chart c on (p.expense_accno_id = c.id)
          WHERE (c.category = 'E') $prwhere $dpt_where
-           AND ac.trans_id IN ( SELECT trans_id FROM acc_trans a JOIN chart c ON (a.chart_id = c.id) WHERE (link LIKE '%AP_paid%') $subwhere)
+           AND ac.trans_id IN ( SELECT trans_id FROM acc_trans a WHERE (a.chart_link LIKE '%AP_paid%') $subwhere)
          $project
          GROUP BY c.$category
          |;
@@ -1167,10 +1169,12 @@ sub aging {
   # mit entsprechender altersstrukturliste (s.a. Bug 1842)
   # eine neue variable an der oberfläche eingeführt, somit ist
   # todate == freier zeitrau und fordate == stichtag
+  # duedate_where == nur fällige rechnungen anzeigen
 
-  my ($review_of_aging_list, $todate, $fromdate, $fromwhere, $fordate);
+  my ($review_of_aging_list, $todate, $fromdate, $fromwhere, $fordate,
+      $duedate_where);
 
-  if ($form->{reporttype} eq 'custom') {  # altersstrukturliste
+  if ($form->{reporttype} eq 'custom') {  # altersstrukturliste, nur fällige
 
     # explizit rausschmeissen was man für diesen bericht nicht braucht
     delete $form->{fromdate};
@@ -1193,7 +1197,8 @@ sub aging {
         $review_of_aging_list = " AND $form->{review_of_aging_list} < (date $fordate) - duedate";
       }
     }
-  } else {  # freier zeitraum OHNE review_of_aging_list
+    $duedate_where = " AND (date $fordate) - duedate >= 0 ";
+  } else {  # freier zeitraum, nur rechnungsdatum und OHNE review_of_aging_list
     $form->{todate}  = $form->current_date($myconfig) unless ($form->{todate});
     $todate = conv_dateq($form->{todate});
     $fromdate = conv_dateq($form->{fromdate});
@@ -1222,11 +1227,11 @@ sub aging {
       street, zipcode, city, country, contact, email,
       phone as customerphone, fax as customerfax, ${ct}number,
       "invnumber", "transdate",
-      (amount - COALESCE((SELECT sum(amount)*$ml FROM acc_trans LEFT JOIN chart ON (acc_trans.chart_id=chart.id) WHERE link ilike '%paid%' AND acc_trans.trans_id=${arap}.id AND acc_trans.transdate <= (date $todate)),0)) as "open", "amount",
+      (amount - COALESCE((SELECT sum(amount)*$ml FROM acc_trans WHERE chart_link ilike '%paid%' AND acc_trans.trans_id=${arap}.id AND acc_trans.transdate <= (date $todate)),0)) as "open", "amount",
       "duedate", invoice, ${arap}.id, date_part('days', now() - duedate) as overduedays,
       (SELECT $buysell
        FROM exchangerate
-       WHERE (${arap}.curr = exchangerate.curr)
+       WHERE (${arap}.currency_id = exchangerate.currency_id)
          AND (exchangerate.transdate = ${arap}.transdate)) AS exchangerate
     FROM ${arap}, ${ct}
     WHERE ((paid != amount) OR (datepaid > (date $todate) AND datepaid is not null))
@@ -1236,6 +1241,7 @@ sub aging {
       AND (${ct}.id = ?)
       AND (transdate <= (date $todate) $fromwhere )
       $review_of_aging_list
+      $duedate_where
     ORDER BY ctid, transdate, invnumber |;
 
   my $sth_details = prepare_query($form, $dbh, $q_details);
@@ -1347,8 +1353,7 @@ sub tax_report {
         (
           SELECT trans_id
           FROM acc_trans a
-          JOIN chart c ON (a.chart_id = c.id)
-          WHERE (link LIKE '%${ARAP}_paid%')
+          WHERE (a.chart_link LIKE '%${ARAP}_paid%')
           AND (transdate <= $todate)
         )
       |;
@@ -1363,9 +1368,7 @@ sub tax_report {
   my $sortorder = join ', ', $form->sort_columns(qw(transdate invnumber name));
   $sortorder = $form->{sort} if ($form->{sort} && grep({ $_ eq $form->{sort} } qw(id transdate invnumber name netamount tax)));
 
-  my $query = '';
-  if ($form->{report} !~ /nontaxable/) {
-    $query =
+  my $query =
       qq|SELECT a.id, '0' AS invoice, $transdate AS transdate, a.invnumber, n.name, a.netamount,
           ac.amount * $ml AS tax
          FROM acc_trans ac
@@ -1387,42 +1390,11 @@ sub tax_report {
          JOIN $table n ON (n.id = a.${table}_id)
          JOIN ${table}tax t ON (t.${table}_id = n.id)
          JOIN invoice i ON (i.trans_id = a.id)
-         JOIN partstax p ON (p.parts_id = i.parts_id)
          WHERE
            $where
            $accno
            AND (a.invoice = '1')
          ORDER BY $sortorder|;
-  } else {
-    # only gather up non-taxable transactions
-    $query =
-      qq|SELECT a.id, '0' AS invoice, $transdate AS transdate, a.invnumber, n.name, a.netamount
-         FROM acc_trans ac
-         JOIN ${arap} a ON (a.id = ac.trans_id)
-         JOIN $table n ON (n.id = a.${table}_id)
-         WHERE
-           $where
-           AND (a.invoice = '0')
-           AND (a.netamount = a.amount)
-
-         UNION
-
-         SELECT a.id, '1' AS invoice, $transdate AS transdate, a.invnumber, n.name, i.sellprice * i.qty AS netamount
-         FROM acc_trans ac
-         JOIN ${arap} a ON (a.id = ac.trans_id)
-         JOIN $table n ON (n.id = a.${table}_id)
-         JOIN invoice i ON (i.trans_id = a.id)
-         WHERE
-           $where
-           AND (a.invoice = '1')
-           AND (
-             a.${table}_id NOT IN (SELECT ${table}_id FROM ${table}tax t (${table}_id))
-             OR
-             i.parts_id NOT IN (SELECT parts_id FROM partstax p (parts_id))
-           )
-         GROUP BY a.id, a.invnumber, $transdate, n.name, i.sellprice, i.qty
-         ORDER by $sortorder|;
-  }
 
   $form->{TR} = selectall_hashref_query($form, $dbh, $query);
 
@@ -1796,89 +1768,6 @@ sub bwa {
   $main::lxdebug->leave_sub();
 }
 
-sub ustva {
-  $main::lxdebug->enter_sub();
-
-  my ($self, $myconfig, $form) = @_;
-
-  # connect to database
-  my $dbh = $form->dbconnect($myconfig);
-
-  my $last_period     = 0;
-  my @categories_cent = qw(51r 511 86r 861 97r 971 93r 931
-    96 66 43 45 53 62 65 67);
-  my @categories_euro = qw(48 51 86 91 97 93 94);
-  $form->{decimalplaces} *= 1;
-
-  foreach my $item (@categories_cent) {
-    $form->{"$item"} = 0;
-  }
-  foreach my $item (@categories_euro) {
-    $form->{"$item"} = 0;
-  }
-
-  &get_accounts_g($dbh, $last_period, $form->{fromdate}, $form->{todate}, $form, "pos_ustva");
-
-  #   foreach $item (@categories_cent) {
-  #     if ($form->{$item}{"jetzt"} > 0) {
-  #       $form->{$item} = $form->{$item}{"jetzt"};
-  #       delete $form->{$item}{"jetzt"};
-  #     }
-  #   }
-  #   foreach $item (@categories_euro) {
-  #     if ($form->{$item}{"jetzt"} > 0) {
-  #       $form->{$item} = $form->{$item}{"jetzt"};
-  #       delete $form->{$item}{"jetzt"};
-  #     }  foreach $item (@categories_cent) {
-  #     if ($form->{$item}{"jetzt"} > 0) {
-  #       $form->{$item} = $form->{$item}{"jetzt"};
-  #       delete $form->{$item}{"jetzt"};
-  #     }
-  #   }
-  #   foreach $item (@categories_euro) {
-  #     if ($form->{$item}{"jetzt"} > 0) {
-  #       $form->{$item} = $form->{$item}{"jetzt"};
-  #       delete $form->{$item}{"jetzt"};
-  #     }
-  #   }
-  #
-  #    }
-
-  #
-  # Berechnung der USTVA Formularfelder
-  #
-  $form->{"51r"} = $form->{"511"};
-  $form->{"86r"} = $form->{"861"};
-  $form->{"97r"} = $form->{"971"};
-  $form->{"93r"} = $form->{"931"};
-
-  #$form->{"96"}  = $form->{"94"} * 0.16;
-  $form->{"43"} =
-    $form->{"51r"} + $form->{"86r"} + $form->{"97r"} + $form->{"93r"} +
-    $form->{"96"};
-  $form->{"45"} = $form->{"43"};
-  $form->{"53"} = $form->{"43"};
-  $form->{"62"} = $form->{"43"} - $form->{"66"};
-  $form->{"65"} = $form->{"43"} - $form->{"66"};
-  $form->{"67"} = $form->{"43"} - $form->{"66"};
-
-  foreach my $item (@categories_cent) {
-    $form->{$item} =
-      $form->format_amount($myconfig, $form->round_amount($form->{$item}, 2),
-                           2, '0');
-  }
-
-  foreach my $item (@categories_euro) {
-    $form->{$item} =
-      $form->format_amount($myconfig, $form->round_amount($form->{$item}, 0),
-                           0, '0');
-  }
-
-  $dbh->disconnect;
-
-  $main::lxdebug->leave_sub();
-}
-
 sub income_statement {
   $main::lxdebug->enter_sub();