Projekt

Allgemein

Profil

« Zurück | Weiter » 

Revision 75254263

Von G. Richardson vor fast 13 Jahren hinzugefügt

  • ID 7525426386204abfcc6e49b481de7389ade44dc4
  • Vorgänger 1b026c0b
  • Nachfolger 9e9a940e

Sammelrechnung / Kundenkonto / Fälligkeitsabrechnung / Statement

Bug 1611

Finanzbuchhaltung -> Berichte -> Offene Forderungen

Jan hatte das ja schon angepasst, daß man die offenen Rechnungen nach einer
Altersstrukturliste filtern kann. Die Ergebnisse stimmten auch, aber wenn man
dann das Ergebnis drucken wollte fehlten die Zahlen.

Die Sammelrechnung soll wohl als Kundenkonto fungieren, damit man dem Kunden
eine Übersicht aller noch offenen Rechnungen schicken kann, mit Übersicht der
Überfälligkeit. Die Druckvorlage ist statement.tex, bzw. statement.html. Bisher
wurden aber nie die Beträge der Rechnungen angezeigt, das funktioniert jetzt
wieder.

  • bei der Datenbankabfrage wird für jede Rechnung die Anzahl der Tage über dem
    Fälligkeitsdatum (Today - duedate) für jede offene Rechnung berechnet
  • der noch offene Betrag wird je nach Anzahl der überfälligen Tage der Rechnung
    zur Kategorie c0, c30, c60 oder c90 hinzugefügt

Die angegebenen Zahlen sind die noch offenen Teile der Rechnung, es steht aber
auch die Gesamtsumme der Rechnung unter der Variablen <%amount%> in der
Druckvorlage zur Verfügung (siehe doc/dokumentenvorlagen-und-variablen.html)

Rechnungen, deren Fälligkeit noch nicht erreicht ist, tauchen ebenfalls in der
c0-Gruppe auf.

Nicht mit Währungsumrechnung getestet.

Im Lx-Office Buch steht zu Sammelrechnung, daß beim Drucken nur Rechnungen für
den ersten Kunden angezeigt werden, aber alle Sammelrechnungen an den
konfigurierten Drucker geschickt werden, ich bin mir nicht sicher, ob das
stimmt. Es gibt ja den Knopf "Alle Auswählen", aber bei E-Mail kann auch nur an
den ersten versendet werden.

Unterschiede anzeigen:

SL/RP.pm
1219 1219
      phone as customerphone, fax as customerfax, ${ct}number,
1220 1220
      "invnumber", "transdate",
1221 1221
      (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",
1222
      "duedate", invoice, ${arap}.id,
1222
      "duedate", invoice, ${arap}.id, date_part('days', now() - duedate) as overduedays,
1223 1223
      (SELECT $buysell
1224 1224
       FROM exchangerate
1225 1225
       WHERE (${arap}.curr = exchangerate.curr)
bin/mozilla/rp.pl
2032 2032
        $form->{ $form->{ct} } = $form->{name};
2033 2033
        $form->{"$form->{ct}_id"} = $ref->{ctid};
2034 2034

  
2035
        map { $form->{$_} = () } qw(invnumber invdate duedate);
2035
        map { $form->{$_} = () } qw(invnumber invdate duedate amount open);
2036 2036
        $form->{total} = 0;
2037 2037
        foreach my $item (qw(c0 c30 c60 c90)) {
2038 2038
          $form->{$item} = ();
......
2101 2101
  push @{ $form->{invnumber} }, $ref->{invnumber};
2102 2102
  push @{ $form->{invdate} },   $ref->{transdate};
2103 2103
  push @{ $form->{duedate} },   $ref->{duedate};
2104
  push @{ $form->{amount} },    $form->format_amount(\%myconfig, $ref->{amount} / $ref->{exchangerate}, 2);
2105
  push @{ $form->{open} },      $form->format_amount(\%myconfig, $ref->{open} / $ref->{exchangerate}, 2);
2104 2106

  
2105 2107
  foreach my $item (qw(c0 c30 c60 c90)) {
2106 2108
    if ($ref->{exchangerate} * 1) {
2107
      $ref->{$item} =
2108
        $form->round_amount($ref->{$item} / $ref->{exchangerate}, 2);
2109
      # add only the open amount of the invoice to the aging, not the total amount
2110
      $ref->{"${item}"} = $form->round_amount($ref->{open} / $ref->{exchangerate}, 2) if $ref->{overduedays} < 30 and $item eq 'c0';
2111
      $ref->{"${item}"} = $form->round_amount($ref->{open} / $ref->{exchangerate}, 2) if $ref->{overduedays} >= 30 and $ref->{overduedays} < 60 and $item eq 'c30';
2112
      $ref->{"${item}"} = $form->round_amount($ref->{open} / $ref->{exchangerate}, 2) if $ref->{overduedays} >= 60 and $ref->{overduedays} < 90 and $item eq 'c60';
2113
      $ref->{"${item}"} = $form->round_amount($ref->{open} / $ref->{exchangerate}, 2) if $ref->{overduedays} >= 90 and $item eq 'c90';
2109 2114
    }
2110 2115
    $form->{"${item}total"} += $ref->{$item};
2111 2116
    $form->{total}          += $ref->{$item};
doc/dokumentenvorlagen-und-variablen.html
112 112
    <li><a href="dokumentenvorlagen-und-variablen.html#anderevorlagen_quotations">Angebote und Preisanfragen</a></li>
113 113
    <li><a href="dokumentenvorlagen-und-variablen.html#anderevorlagen_orders">Auftragsbest&auml;tigungen und Lieferantenauftr&auml;ge</a></li>
114 114
    <li><a href="dokumentenvorlagen-und-variablen.html#anderevorlagen_delivery_orders">Lieferscheine (Verkauf und Einkauf)</a></li>
115
    <li><a href="dokumentenvorlagen-und-variablen.html#anderevorlagen_statement">Sammelrechnung</a></li>
115 116
   </ol>
116 117
  </li>
117 118

  
......
1228 1229
  </table>
1229 1230
 </p>
1230 1231

  
1232
 <p>F&uuml;r jede Position eines Lieferscheines gibt es ein Unterarray mit
1233
  den Informationen dar&uuml;ber, von welchem Lager und Lagerplatz aus die
1234
  Waren verschickt wurden (Verkaufslieferscheine) bzw. auf welchen
1235
  Lagerplatz sie eingelagert wurden. Diese m&uuml;ssen mittels
1236
  einer <code>foreach</code>-Schleife ausgegeben werden. Diese
1237
  Variablen sind:</p>
1238

  
1239

  
1231 1240
 <p>F&uuml;r jede Position eines Lieferscheines gibt es ein Unterarray mit
1232 1241
  den Informationen dar&uuml;ber, von welchem Lager und Lagerplatz aus die
1233 1242
  Waren verschickt wurden (Verkaufslieferscheine) bzw. auf welchen
......
1273 1282
  </table>
1274 1283
 </p>
1275 1284

  
1285
 <h3><a name="anderevorlagen_statement">Sammelrechnung</a></h3>
1286

  
1287
 <h3> Variablen f&uuml;r Sammelrechnung:</h3>
1288
 <p>
1289
  <table border="1">
1290
   <tr><th>Variablenname</th><th>Bedeutung</th></tr>
1291
   <tr>
1292
    <td><code>c0total</code></td>
1293
    <td>Gesamtbetrag aller Rechnungen mit F&auml;lligkeit &lt; 30 Tage</td>
1294
   </tr>
1295
   <tr>
1296
    <td><code>c30total</code></td>
1297
    <td>Gesamtbetrag aller Rechnungen mit F&auml;lligkeit &gt;= 30 und &lt; 60 Tage</td>
1298
   </tr>
1299
   <tr>
1300
    <td><code>c60total</code></td>
1301
    <td>Gesamtbetrag aller Rechnungen mit F&auml;lligkeit &gt;= 60 und &lt; 90 Tage</td>
1302
   </tr>
1303
   <tr>
1304
    <td><code>c90total</code></td>
1305
    <td>Gesamtbetrag aller Rechnungen mit F&auml;lligkeit &gt;= 90 Tage</td>
1306
   </tr>
1307
   <tr>
1308
    <td><code>total</code></td>
1309
    <td>Gesamtbetrag aller Rechnungen</td>
1310
   </tr>
1311
  </table>
1312
 </p>
1313

  
1314
 <h3> Variablen f&uuml;r jede Rechnungsposition in Sammelrechnung:</h3>
1315
 <p>
1316
  <table border="1">
1317
   <tr><th>Variablenname</th><th>Bedeutung</th></tr>
1318
   <tr>
1319
    <td><code>invnumber</code></td>
1320
    <td>Rechnungsnummer</td>
1321
   </tr>
1322
   <tr>
1323
    <td><code>invdate</code></td>
1324
    <td>Rechnungsdatum</td>
1325
   </tr>
1326
   <tr>
1327
    <td><code>duedate</code></td>
1328
    <td>F&auml;lligkeitsdatum</td>
1329
   </tr>
1330
   <tr>
1331
    <td><code>amount</code></td>
1332
    <td>Summe der Rechnung</td>
1333
   </tr>
1334
   <tr>
1335
    <td><code>open</code></td>
1336
    <td>Noch offener Betrag der Rechnung</td>
1337
   </tr>
1338
   <tr>
1339
    <td><code>c0</code></td>
1340
    <td>Noch offener Rechnungsbetrag mit F&auml;lligkeit &lt; 30 Tage</td>
1341
   </tr>
1342
   <tr>
1343
    <td><code>c30</code></td>
1344
    <td>Noch offener Rechnungsbetrag mit F&auml;lligkeit &gt;= 30 und &lt; 60 Tage</td>
1345
   </tr>
1346
   <tr>
1347
    <td><code>c60</code></td>
1348
    <td>Noch offener Rechnungsbetrag mit F&auml;lligkeit &gt;= 60 und &lt; 90 Tage</td>
1349
   </tr>
1350
   <tr>
1351
    <td><code>c90</code></td>
1352
    <td>Noch offener Rechnungsbetrag mit F&auml;lligkeit &gt;= 90 Tage</td>
1353
   </tr>
1354
  </table>
1355
 </p>
1356

  
1357

  
1358

  
1359

  
1276 1360
 <small><a href="dokumentenvorlagen-und-variablen.html#inhaltsverzeichnis">
1277 1361
   zum Inhaltsverzeichnis</a></small><br>
1278 1362
 <hr>
......
1286 1370
  ... &lt;%end%&gt;</code></p>
1287 1371

  
1288 1372
 <p>Anmerkung zum <code>&lt;%end%&gt;</code>: Der besseren
1289
  Verständlichkeit halber kann man nach dem <code>end</code> noch
1290
  beliebig weitere Wörter schreiben, um so zu markieren, welche
1373
  Verst&auml;ndlichkeit halber kann man nach dem <code>end</code> noch
1374
  beliebig weitere W&ouml;rter schreiben, um so zu markieren, welche
1291 1375
  Anweisung (z.B. <code>if</code> oder <code>foreach</code>) damit
1292 1376
  abgeschlossen wird.</p>
1293 1377

  
1294 1378
 <p>Beispiel: Lautet der Beginn eines Blockes
1295 1379
   z.B. <code class="blue">&lt;%if type ==
1296
   &quot;sales_quotation&quot;%&gt;</code>, so könnte er mit
1380
   &quot;sales_quotation&quot;%&gt;</code>, so k&ouml;nnte er mit
1297 1381
  <code class="blue">&lt;%end%&gt;</code> genauso abgeschlossen werden
1298 1382
  wie mit
1299 1383
  <code class="blue">&lt;%end if%&gt;</code> oder auch
......
1316 1400
  wird. Beispiel: <code class="blue">&lt;%if not
1317 1401
  cp_greeting%&gt;</code></p>
1318 1402

  
1319
 <p>Zusätzlich zu dem einfachen Test, ob eine Variable gesetzt ist
1320
  oder nicht, bietet dieser Block auch die Möglichkeit, den Inhalt
1403
 <p>Zus&auml;tzlich zu dem einfachen Test, ob eine Variable gesetzt ist
1404
  oder nicht, bietet dieser Block auch die M&ouml;glichkeit, den Inhalt
1321 1405
  einer Variablen mit einer festen Zeichenkette oder einer anderen
1322 1406
  Variablen zu vergleichen. Ob der Vergleich mit einer Zeichenkette
1323
  oder einer anderen Variablen vorgenommen wird, hängt davon ab, ob
1324
  die rechte Seite des Vergleichsoperators in Anführungszeichen
1407
  oder einer anderen Variablen vorgenommen wird, h&auml;ngt davon ab, ob
1408
  die rechte Seite des Vergleichsoperators in Anf&uuml;hrungszeichen
1325 1409
  gesetzt wird (Vergleich mit Zeichenkette) oder nicht (Vergleich mit
1326 1410
  anderer Variablen). Zwei Beispiele, die beide Vergleiche zeigen:</p>
1327 1411

  
1328 1412
 <p><code class="blue">&lt;%if var1 == &quot;Wert&quot;%&gt;</code>
1329
  testet die Variable &quot;var1&quot; auf Übereinstimmung mit der
1413
  testet die Variable &quot;var1&quot; auf &Uuml;bereinstimmung mit der
1330 1414
  Zeichenkette &quot;Wert&quot;. Mittels &quot;!=&quot; anstelle von
1331
  &quot;==&quot; würde auf Ungleichheit getestet.</p>
1415
  &quot;==&quot; w&uuml;rde auf Ungleichheit getestet.</p>
1332 1416

  
1333 1417
 <p><code class="blue">&lt;%if var1 == var2%&gt;</code> testet die
1334
  Variable &quot;var1&quot; auf Übereinstimmung mit der Variablen
1418
  Variable &quot;var1&quot; auf &Uuml;bereinstimmung mit der Variablen
1335 1419
  &quot;var2&quot;. Mittels &quot;!=&quot; anstelle von &quot;==&quot;
1336
  würde auf Ungleichheit getestet.</p>
1420
  w&uuml;rde auf Ungleichheit getestet.</p>
1337 1421

  
1338
 <p>Erfahrere Benutzer können neben der Tests auf (Un-)Gleichheit auch
1339
  Tests auf Übereinstimmung mit regulären Ausdrücken ohne
1340
  Berücksichtung der Groß- und Kleinschreibung durchführen. Dazu dient
1422
 <p>Erfahrere Benutzer k&ouml;nnen neben der Tests auf (Un-)Gleichheit auch
1423
  Tests auf &Uuml;bereinstimmung mit regul&auml;ren Ausdr&uuml;cken ohne
1424
  Ber&uuml;cksichtung der Gro&szlig;- und Kleinschreibung durchf&uuml;hren. Dazu dient
1341 1425
  dieselbe Syntax wie oben nur mit &quot;=~&quot; und &quot;!~&quot;
1342 1426
  als Vergleichsoperatoren.</p>
1343 1427

  
1344
 <p>Beispiel für einen Test, ob die Variable &quot;intnotes&quot;
1345
  (interne Bemerkungen) das Wort &quot;schwierig&quot; enthält:
1428
 <p>Beispiel f&uuml;r einen Test, ob die Variable &quot;intnotes&quot;
1429
  (interne Bemerkungen) das Wort &quot;schwierig&quot; enth&auml;lt:
1346 1430
  <code class="blue">&lt;%if intnotes =~
1347 1431
  &quot;schwierig&quot;%&gt;</code></p>
1348 1432

  

Auch abrufbar als: Unified diff