Bugfix 1842 Offene Posten Alterstrukturliste prüft nur auf tagesaktuellem Datum
authorJan Büren <jan@kivitendo-premium.de>
Thu, 8 Nov 2012 15:04:27 +0000 (16:04 +0100)
committerJan Büren <jan@kivitendo-premium.de>
Thu, 8 Nov 2012 15:04:27 +0000 (16:04 +0100)
Wie in #1842. beschrieben, ist jetzt eindeutiger, wann ein freier Zeitraum
ausgewählt ist oder eine Altersstrukturliste zum Stichtag.

Testfall 1: Datumsfelder leer oder gefüllt
Testfall 2: Vergleich der offenen Posten mit Werten aus der vorherigen Version für Forderungen
Testfall 3: Vergleich der offenen Posten mit Werten aus der vorherigen Version für Verbindlichkeiten

Variante I. freier Zeitraum
                        Test 1   Test 2   Test 3
Von gefüllt, Bis leer |  i.O.  |  i.O.   |  i.O.
Von leer, Bis gefüllt |  i.O.  |  i.O.   |  i.O.
Von leer, Bis < heute |   x    |  i.O.   |  i.O.
Zwischenzeitraum      |   x    |  i.O.   |  i.O.

Variante II. Altersstrukturliste
                       Test 1    Test 2    Test 3
Auswahl leer          |  i.O.  |  i.O.   |  i.O.
Auswahl 0-30          |   x    |  i.O.   |  i.O.
Auswahl > 120 |  x    |  i.O.  |  i.O.   |  i.O.

SL/RP.pm
bin/mozilla/rp.pl
locale/de/all
templates/webpages/rp/report.html

index bbfb098..01f0be9 100644 (file)
--- a/SL/RP.pm
+++ b/SL/RP.pm
@@ -1171,6 +1171,8 @@ sub aging {
 
   my ($invoice, $arap, $buysell, $ct, $ct_id, $ml);
 
+  # falls customer ziehen wir die offene forderungsliste
+  # anderfalls für die lieferanten die offenen verbindlichkeitne
   if ($form->{ct} eq "customer") {
     $invoice = "is";
     $arap = "ar";
@@ -1186,12 +1188,42 @@ sub aging {
   }
   $ct_id = "${ct}_id";
 
-  $form->{todate} = $form->current_date($myconfig) unless ($form->{todate});
-  my $todate = conv_dateq($form->{todate});
-  my $fromdate = conv_dateq($form->{fromdate});
+  # erweiterung um einen freien zeitraum oder einen stichtag
+  # mit entsprechender altersstrukturliste (s.a. Bug 1842)
+  # eine neue variable an der oberfläche eingeführt, somit ist
+  # todate == freier zeitrau und fordate == stichtag
 
-  my $fromwhere = ($form->{fromdate} ne "") ? " AND (transdate >= (date $fromdate)) " : "";
+  my ($review_of_aging_list, $todate, $fromdate, $fromwhere, $fordate);
 
+  if ($form->{reporttype} eq 'custom') {  # altersstrukturliste
+
+    # explizit rausschmeissen was man für diesen bericht nicht braucht
+    delete $form->{fromdate};
+    delete $form->{todate};
+
+    # an der oberfläche ist das tagesaktuelle datum vorausgewählt
+    # falls es dennoch per Benutzereingabe gelöscht wird, lieber wieder vorbelegen
+    # ferner muss für die spätere DB-Abfrage muss todate gesetzt sein.
+    $form->{fordate}  = $form->current_date($myconfig) unless ($form->{fordate});
+    $fordate          = conv_dateq($form->{fordate});
+    $todate           = $fordate;
+
+    if ($form->{review_of_aging_list}) { # falls die liste leer ist, alles anzeigen
+      if ($form->{review_of_aging_list} =~ m "-") {             # ..  periode von bis
+        my @period = split(/-/, $form->{review_of_aging_list}); # ... von periode bis periode
+        $review_of_aging_list = " AND $period[0] <  (date $fordate) - duedate
+                                  AND (date $fordate) - duedate  < $period[1]";
+      } else {
+        $form->{review_of_aging_list} =~ s/[^0-9]//g;   # größer 120 das substitute ist nur für das '>' zeichen
+        $review_of_aging_list = " AND $form->{review_of_aging_list} < (date $fordate) - duedate";
+      }
+    }
+  } else {  # freier zeitraum OHNE review_of_aging_list
+    $form->{todate}  = $form->current_date($myconfig) unless ($form->{todate});
+    $todate = conv_dateq($form->{todate});
+    $fromdate = conv_dateq($form->{fromdate});
+    $fromwhere = ($form->{fromdate} ne "") ? " AND (transdate >= (date $fromdate)) " : "";
+  }
   my $where = " 1 = 1 ";
   my ($name, $null);
 
@@ -1209,19 +1241,7 @@ sub aging {
     $where .= qq| AND (a.department_id = | . conv_i($department_id, 'NULL') . qq|)|;
     $where_dpt = qq| AND (${arap}.department_id = | . conv_i($department_id, 'NULL') . qq|)|;
   }
-  my $review_of_aging_list;
-  if ($form->{review_of_aging_list}) {
-    if ($form->{review_of_aging_list} =~ m "-"){
-      my @period = split(/-/, $form->{review_of_aging_list});
-      $review_of_aging_list = " AND $period[0] < date_part('days', now() - duedate)
-                                AND date_part('days', now() - duedate)  < $period[1]";
-    } else {
-      $form->{review_of_aging_list} =~ s/[^0-9]//g;
-      $review_of_aging_list = " AND $form->{review_of_aging_list} < date_part('days', now() - duedate)";
-    }
-  }
-
-  my $q_details = qq|
+ my $q_details = qq|
 
     SELECT ${ct}.id AS ctid, ${ct}.name,
       street, zipcode, city, country, contact, email,
index 1068da7..bc2eab6 100644 (file)
@@ -196,6 +196,7 @@ sub report {
     vc                  => $vc,
     label               => $label,
     year                => DateTime->today->year,
+    today               => DateTime->today,
     nextsub             => $nextsub,
     accrual             => $::instance_conf->get_accounting_method ne 'cash',
     cash                => $::instance_conf->get_accounting_method eq 'cash',
index 604ae2e..0ac77a8 100644 (file)
@@ -1557,6 +1557,7 @@ $self->{texts} = {
   'Recorded taxkey'             => 'Gespeicherter Steuerschlüssel',
   'Reference'                   => 'Referenz',
   'Reference / Invoice Number'  => 'Referenz / Rechnungsnummer',
+  'Reference day'               => 'Stichtag',
   'Reference missing!'          => 'Referenz fehlt!',
   'Release From Stock'          => 'Lagerausgang',
   'Remaining'                   => 'Rest',
@@ -2347,6 +2348,7 @@ $self->{texts} = {
   'follow_up_list'              => 'wiedervorlageliste',
   'for'                         => 'f&uuml;r',
   'for Period'                  => 'für den Zeitraum',
+  'for date'                    => 'zum Stichtag',
   'found'                       => 'Gefunden',
   'from (time)'                 => 'von',
   'general_ledger_list'         => 'buchungsjournal',
index cf755d6..807885c 100644 (file)
@@ -83,7 +83,7 @@
 <table border="0">
 [%- IF selectdepartment %]
   <tr>
-    <th align=right nowrap>[% 'Department' | $T8 %]</th>
+    <th align="left" nowrap>[% 'Department' | $T8 %]</th>
     <td colspan=3><select name=department>[% selectdepartment %]</select></td>
   </tr>
 [%- END %]
 
 [%- IF is_aging %]
   <tr>
-    <th align=right>[% label %]</th>
+    <th align=left>[% label %]</th>
     <td>[% vc %]</td>
   </tr>
+</table>
+<table border="0">
+  <tr>
+    <td colspan=5><hr size=1 noshade></td>
+  </tr>
   <tr>
-    <td>[% 'Review of Aging list' | $T8 %]</td>
-    <td><select name="review_of_aging_list">
+    <th align=left><input name=reporttype class=radio type=radio value="custom" checked><b>[% 'Reference day' | $T8 %]</b>&nbsp; </th>
+     <td align="right" colspan="4">[% 'Review of Aging list' | $T8 %] <select name="review_of_aging_list">
         <option></option>
         <option>0-30</option>
         <option>30-60</option>
         <option>60-90</option>
         <option>90-120</option>
         <option>&gt; 120</option>
-        </select>
+        </select> [% 'for date' | $T8 %] [% L.date_tag('fordate', today) %]
     </td>
   </tr>
   <tr>
-    <td align=left colspan=4>
+    <td colspan=5><hr size=3 noshade></td>
+ </tr>
+ <tr>
+    <th align=left><input name=reporttype class=radio type=radio value="free"><b>[% 'Free report period' | $T8 %]</b>&nbsp; </th>
+    <td align="right" colspan=4>
       [% 'From' | $T8 %] [% L.date_tag('fromdate', fromdate) %]
       [% 'Bis' | $T8 %] [% L.date_tag('todate') %]
     </td>