Hallo parimo,
invoice_addpos != invoice_addpos_final !(übersetzt für "Nichtprogrammierer"

invoice_addpos ist nicht das selbe wie invoice_addpos_final)
invoice_addposDiese Funktion dient dazu innerhalb der Summenberechnung der Rechnung eine zusätzliche Rechnungsposition zu berücksichtigen. Dazu müssen die als Referenz übergebenen Variablen der Summenberechnung modifiziert werden. Dies sind die Gesamtsumme, die Gesamtsumme des Nettowertes und die Gesamtsumme der Steuer. Als zusätzliche Informationen wird der Umsatzsteuersatz 1 und ein Flag übergeben, welches anzeigt, ob eine Nettorechnung vorliegt.
invoice_addpos_finalDie Parameter entsprechen der Funktion invoice_addpos() und zusätzlich Versandkosten, Mindermengenzuschlag und Zahlungskosten.
Im Unterschied zu invoice_addpos() wird jedoch die Veränderung der Rechnungssummen nach der Berechnung aller übrigen Kosten (Versand, Zahlung) und Gutschriften (z.B. Rabatte) berechnet
Du schreibst also das Callback:invoice_addpos_final komplett so wie's im Handbuch steht
zusätzlich in die stdcart.ipl und veränderst nichts an dem Callback:invoice_addpos
<!--spmacro:module(Callback)
sub invoice_addpos_final {
my $ref_gesamt = $_[0];
my $ref_gesamt_steuer = $_[2];
my $ust = $_[3]/100;
my $netto = $_[4];
my ($wert,$text) = ssp::get_cart_zone();
# Wenn 10 die Zahlungszonen-ID für ein Land ohne Mwst. Berechnung ist
if ($wert == 10) {
$$ref_gesamt -= $$ref_gesamt_steuer;
$$ref_gesamt_steuer = 0;
}
return 0;
}
-->
$wert == 10 -> die "10" ersetzt Du mit Deiner Lieferzonennr.
Wenn mehrere Zonen steuerfrei sein sollen, trägst Du das so ein:
if ($wert == 10 || $wert == 3 || $wert == 12) { ...