From 7525426386204abfcc6e49b481de7389ade44dc4 Mon Sep 17 00:00:00 2001 From: "G. Richardson" Date: Wed, 12 Oct 2011 12:22:08 +0200 Subject: [PATCH] =?utf8?q?Sammelrechnung=20/=20Kundenkonto=20/=20F=C3=A4ll?= =?utf8?q?igkeitsabrechnung=20/=20Statement?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit 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. --- SL/RP.pm | 2 +- bin/mozilla/rp.pl | 11 +- doc/dokumentenvorlagen-und-variablen.html | 116 +++++++++++++++++++--- 3 files changed, 109 insertions(+), 20 deletions(-) diff --git a/SL/RP.pm b/SL/RP.pm index 113e9dd42..49dbff603 100644 --- a/SL/RP.pm +++ b/SL/RP.pm @@ -1219,7 +1219,7 @@ sub aging { 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", - "duedate", invoice, ${arap}.id, + "duedate", invoice, ${arap}.id, date_part('days', now() - duedate) as overduedays, (SELECT $buysell FROM exchangerate WHERE (${arap}.curr = exchangerate.curr) diff --git a/bin/mozilla/rp.pl b/bin/mozilla/rp.pl index 8d0ec94f2..125d0b916 100644 --- a/bin/mozilla/rp.pl +++ b/bin/mozilla/rp.pl @@ -2032,7 +2032,7 @@ sub print_form { $form->{ $form->{ct} } = $form->{name}; $form->{"$form->{ct}_id"} = $ref->{ctid}; - map { $form->{$_} = () } qw(invnumber invdate duedate); + map { $form->{$_} = () } qw(invnumber invdate duedate amount open); $form->{total} = 0; foreach my $item (qw(c0 c30 c60 c90)) { $form->{$item} = (); @@ -2101,11 +2101,16 @@ sub statement_details { push @{ $form->{invnumber} }, $ref->{invnumber}; push @{ $form->{invdate} }, $ref->{transdate}; push @{ $form->{duedate} }, $ref->{duedate}; + push @{ $form->{amount} }, $form->format_amount(\%myconfig, $ref->{amount} / $ref->{exchangerate}, 2); + push @{ $form->{open} }, $form->format_amount(\%myconfig, $ref->{open} / $ref->{exchangerate}, 2); foreach my $item (qw(c0 c30 c60 c90)) { if ($ref->{exchangerate} * 1) { - $ref->{$item} = - $form->round_amount($ref->{$item} / $ref->{exchangerate}, 2); + # add only the open amount of the invoice to the aging, not the total amount + $ref->{"${item}"} = $form->round_amount($ref->{open} / $ref->{exchangerate}, 2) if $ref->{overduedays} < 30 and $item eq 'c0'; + $ref->{"${item}"} = $form->round_amount($ref->{open} / $ref->{exchangerate}, 2) if $ref->{overduedays} >= 30 and $ref->{overduedays} < 60 and $item eq 'c30'; + $ref->{"${item}"} = $form->round_amount($ref->{open} / $ref->{exchangerate}, 2) if $ref->{overduedays} >= 60 and $ref->{overduedays} < 90 and $item eq 'c60'; + $ref->{"${item}"} = $form->round_amount($ref->{open} / $ref->{exchangerate}, 2) if $ref->{overduedays} >= 90 and $item eq 'c90'; } $form->{"${item}total"} += $ref->{$item}; $form->{total} += $ref->{$item}; diff --git a/doc/dokumentenvorlagen-und-variablen.html b/doc/dokumentenvorlagen-und-variablen.html index 978a529bd..4e048dcf0 100644 --- a/doc/dokumentenvorlagen-und-variablen.html +++ b/doc/dokumentenvorlagen-und-variablen.html @@ -112,6 +112,7 @@ td {
  • Angebote und Preisanfragen
  • Auftragsbestätigungen und Lieferantenaufträge
  • Lieferscheine (Verkauf und Einkauf)
  • +
  • Sammelrechnung
  • @@ -1228,6 +1229,14 @@ td {

    +

    Für jede Position eines Lieferscheines gibt es ein Unterarray mit + den Informationen darüber, von welchem Lager und Lagerplatz aus die + Waren verschickt wurden (Verkaufslieferscheine) bzw. auf welchen + Lagerplatz sie eingelagert wurden. Diese müssen mittels + einer foreach-Schleife ausgegeben werden. Diese + Variablen sind:

    + +

    Für jede Position eines Lieferscheines gibt es ein Unterarray mit den Informationen darüber, von welchem Lager und Lagerplatz aus die Waren verschickt wurden (Verkaufslieferscheine) bzw. auf welchen @@ -1273,6 +1282,81 @@ td {

    +

    Sammelrechnung

    + +

    Variablen für Sammelrechnung:

    +

    + + + + + + + + + + + + + + + + + + + + + + +
    VariablennameBedeutung
    c0totalGesamtbetrag aller Rechnungen mit Fälligkeit < 30 Tage
    c30totalGesamtbetrag aller Rechnungen mit Fälligkeit >= 30 und < 60 Tage
    c60totalGesamtbetrag aller Rechnungen mit Fälligkeit >= 60 und < 90 Tage
    c90totalGesamtbetrag aller Rechnungen mit Fälligkeit >= 90 Tage
    totalGesamtbetrag aller Rechnungen
    +

    + +

    Variablen für jede Rechnungsposition in Sammelrechnung:

    +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    VariablennameBedeutung
    invnumberRechnungsnummer
    invdateRechnungsdatum
    duedateFälligkeitsdatum
    amountSumme der Rechnung
    openNoch offener Betrag der Rechnung
    c0Noch offener Rechnungsbetrag mit Fälligkeit < 30 Tage
    c30Noch offener Rechnungsbetrag mit Fälligkeit >= 30 und < 60 Tage
    c60Noch offener Rechnungsbetrag mit Fälligkeit >= 60 und < 90 Tage
    c90Noch offener Rechnungsbetrag mit Fälligkeit >= 90 Tage
    +

    + + + + zum Inhaltsverzeichnis

    @@ -1286,14 +1370,14 @@ td { ... <%end%>

    Anmerkung zum <%end%>: Der besseren - Verständlichkeit halber kann man nach dem end noch - beliebig weitere Wörter schreiben, um so zu markieren, welche + Verständlichkeit halber kann man nach dem end noch + beliebig weitere Wörter schreiben, um so zu markieren, welche Anweisung (z.B. if oder foreach) damit abgeschlossen wird.

    Beispiel: Lautet der Beginn eines Blockes z.B. <%if type == - "sales_quotation"%>, so könnte er mit + "sales_quotation"%>, so könnte er mit <%end%> genauso abgeschlossen werden wie mit <%end if%> oder auch @@ -1316,33 +1400,33 @@ td { wird. Beispiel: <%if not cp_greeting%>

    -

    Zusätzlich zu dem einfachen Test, ob eine Variable gesetzt ist - oder nicht, bietet dieser Block auch die Möglichkeit, den Inhalt +

    Zusätzlich zu dem einfachen Test, ob eine Variable gesetzt ist + oder nicht, bietet dieser Block auch die Möglichkeit, den Inhalt einer Variablen mit einer festen Zeichenkette oder einer anderen Variablen zu vergleichen. Ob der Vergleich mit einer Zeichenkette - oder einer anderen Variablen vorgenommen wird, hängt davon ab, ob - die rechte Seite des Vergleichsoperators in Anführungszeichen + oder einer anderen Variablen vorgenommen wird, hängt davon ab, ob + die rechte Seite des Vergleichsoperators in Anführungszeichen gesetzt wird (Vergleich mit Zeichenkette) oder nicht (Vergleich mit anderer Variablen). Zwei Beispiele, die beide Vergleiche zeigen:

    <%if var1 == "Wert"%> - testet die Variable "var1" auf Übereinstimmung mit der + testet die Variable "var1" auf Übereinstimmung mit der Zeichenkette "Wert". Mittels "!=" anstelle von - "==" würde auf Ungleichheit getestet.

    + "==" würde auf Ungleichheit getestet.

    <%if var1 == var2%> testet die - Variable "var1" auf Übereinstimmung mit der Variablen + Variable "var1" auf Übereinstimmung mit der Variablen "var2". Mittels "!=" anstelle von "==" - würde auf Ungleichheit getestet.

    + würde auf Ungleichheit getestet.

    -

    Erfahrere Benutzer können neben der Tests auf (Un-)Gleichheit auch - Tests auf Übereinstimmung mit regulären Ausdrücken ohne - Berücksichtung der Groß- und Kleinschreibung durchführen. Dazu dient +

    Erfahrere Benutzer können neben der Tests auf (Un-)Gleichheit auch + Tests auf Übereinstimmung mit regulären Ausdrücken ohne + Berücksichtung der Groß- und Kleinschreibung durchführen. Dazu dient dieselbe Syntax wie oben nur mit "=~" und "!~" als Vergleichsoperatoren.

    -

    Beispiel für einen Test, ob die Variable "intnotes" - (interne Bemerkungen) das Wort "schwierig" enthält: +

    Beispiel für einen Test, ob die Variable "intnotes" + (interne Bemerkungen) das Wort "schwierig" enthält: <%if intnotes =~ "schwierig"%>

    -- 2.20.1