Rechnungssumme auf 5 bzw. 0 Rappen runden (Rappenrundung für die Schweiz)

Begonnen von ahe, Januar 11, 2008, 12:32:12

« vorheriges - nächstes »

0 Mitglieder und 3 Gäste betrachten dieses Thema.

ahe

Rechnungsbeträge werden in der Schweiz auf 0 bzw. 5 Rappen gerundet.
Man nennt dies auch Rappenrundung.

Bezogen auf das Shop-System Shoppilot gilt dabei folgendes:
Sofern die Preise im Shop als Brutto-Preise angegeben sind treten hierbei keine Probleme auf,
da sämtliche Artikelpreise und Zuschläge schon gerundet in den Shop eingepflegt wurden.

Sind die Preise allerdings als Netto-Preise angegeben, so geschieht bei einer Bestellung folgendes:
Alle Preise, Zuschläge, etc. werden aufsummiert und ergeben die Netto-Gesamtsumme.
Auf Basis der Netto-Gesamtsumme und des Steuersatzes wird die Umsatzsteuersumme berechnet.
Die Brutto-Gesamtsumme ist wiederum die Summe aus Netto-Gesamtsumme und Umsatzsteuersumme.
Da bei der Berechnung der Umsatzsteuersumme ein "schweizerisch ungerades" Ergebnis berechnet wird,
ist folglich auch die Brutto-Gesamtsumme (also die Rechnungssumme) ungerade.

Zur Korrektur dieses Verhaltens kann die folgende Funktion Callback::invoice_addpos_final verwendet werden.
Nach der Berechnung aller relevanten Summen wie (Netto-/Brutto-Gesamtsumme, Umsatzsteuersumme, etc.)
rundet diese Funktion die benötigten Summen wie in der Schweiz üblich.

Tragen Sie den Code in die stdcart.ipl ein:

<!--spmacro::module(Callback)
sub invoice_addpos_final {
    my $cp_sumto = shift;           # Gesamt Brutto
    my $cp_sumto_netto = shift;     # Gesamt Netto
    my $cp_taxto = shift;           # Gesamt UST
    my $ust = shift; # noref        # UST-ID
    my $netto = shift; # noref      # Preis in netto (1=ja/0=nein)
    my $versandbetrag = shift;      # Versandkosten
    my $minderbetrag = shift;       # Mindermengenzuschlag
    my $zahlkosten = shift;         # Zahlartkosten
   
    ## Schweiz: Rappen runden auf 0 / 5
    ## Macht jedoch nur Sinn, wenn die Preise im Shop als Netto-Preise angegeben sind.
    ## In diesem Fall ist die Netto-Gesamtsumme schon "rund", die Brutto-Gesamtsumme
    ## jedoch wird automatisch berechnet, wodurch "unrunde" Summen entstehen.
    if ($netto) {
        $$cp_sumto = runden($$cp_sumto*20)/20;
        $$cp_taxto = runden($$cp_taxto*20)/20;
    }
}

## kaufm. runden
sub runden {
    my $val = shift || 0;

    my $r =  ( $val < 0 ) ? -1 : 1;
    $r *= 0.5;
   
    return int($val + $r);
}
-->
MfG ahe