Merge branch 'sales-purchase-longdescription-jquery-dialog'
[kivitendo-erp.git] / SL / RP.pm
index 37b1109..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)
         )
       |;