Hallo nochmal,
habe die kundenspezifischen Rabatte gerade mal im Konfigurator Shop eingebaut - es funktioniert genauso, wie ich das theoretisch überlegt habe
also ein ben.def Kundenfeld "RABATTKLASSE" anlegen.
zum testen habe ich 3 neue Kunden angelegt und ihnen Rabattklasse 1, 2 und 3 zugewiesen (= 1, 2 und 3 in das neue Feld "RABATTKLASSE" eingetragen)
im Script habe ich
STATT dem Rabatt nach Subkatalog 3 Rabattstaffeln für Kundengruppen eingetragen und der Übersichtlichkeit halber das "kein Rabatt für Aktionsartikel" rausgenommen.
(ginge auch beides, aber das ist dann etwas komplizierter)
das Script in stdcart.ipl schaut jetzt so aus:
<!--spmacro:module(defs)
# verschiedene Staffeln
# [Startwert, Endwert, Rabatt]
# Rabattklasse 1
$staffelrab[1] =[
[ 0 , 449.99 , 0.0],
[150 , 4999.99 , 10.0],
[5000, 14999.99 , 20.0],
[15000 , 9999999 , 25.0]
];
# Rabattklasse 2
$staffelrab[2] =[
[0 , 999.99 , 0.0],
[1000 , 4999.99 , 5.0],
[5000 , 9999999 , 10.0]
];
# Rabattklasse 3
$staffelrab[3] =[
[ 0 , 149.99 , 0.0],
[150 , 249.99 , 2.0],
[250 , 499.99 , 3.0],
[500 , 999.99 , 4.0],
[1000 , 4999.99 , 5.0],
[5000 , 9999999 , 7.0]
];
-->
<!--spmacro:module(Callback)
$summe = 0;
$nextstep = 0;
$nrabattpz = 0;
$rabattpz = 0;
$rabatt = 0;
sub invoice_addpos {
my $ref_gesamt = $_[0];
my $ref_gesamt_netto = $_[1];
my $ref_gesamt_steuer = $_[2];
my $anzahl = ssp::get_cart_items();
my $ust = $_[3]/100;
my $netto = $_[4];
my $kdr = ssp::get_var_user("RABATTKLASSE");
my $rabattliste = 0;
for (my $i = 0;$i <= $anzahl;++$i) {
$summe += ssp::get_var_cart('preis',$i) * ssp::get_var_cart('anzahl',$i);
}
# ssp::trace("+++++ invoice_addpos" . $#{$defs::staffelrab[$kdr]} . "|" . $defs::staffelrab[1]->[$i][0]);
my $i;
for ($i = 0; $i <= $#{$defs::staffelrab[$kdr]}; ++$i) {
last if (($summe >= $defs::staffelrab[$kdr]->[$i][0]) && ($summe <= $defs::staffelrab[$kdr]->[$i][1]));
}
$rabatt = $summe * $defs::staffelrab[$kdr]->[$i][2]/100;
$rabattpz = $defs::staffelrab[$kdr]->[$i][2];
if ($i < $#{$defs::staffelrab[$kdr]}) {
++$i; ## höhere Rabattstafel möglich
}
$nextstep = $defs::staffelrab[$kdr]->[$i][0];
$nrabattpz = $defs::staffelrab[$kdr]->[$i][2];
# ssp::trace("+++++ invoice_addpos $kdr Summe: $summe rabatt $rabatt | $nextstep | $nrabattpz\n");
# ssp::trace("+++++ invoice_addpos $$ref_gesamt $$ref_gesamt_netto $$ref_gesamt_steuer\n");
$$ref_gesamt -= $rabatt;
if (!$netto) { ## Bruttopreise
$$ref_gesamt_steuer -= $rabatt * (1 - 1/(1+$ust));
} else { ## nettopreise
$$ref_gesamt_steuer -= $rabattsumme*$ust;
}
# ssp::trace("+++++ invoice_addpos $$ref_gesamt $$ref_gesamt_netto $$ref_gesamt_steuer\n");
}
-->
<!--spmacro:module(rabatt)
#Gesamtrabatt Betrag
sub rabatt {
main::mprint("- " . main::fp($Callback::rabatt));
}
#Gesamtrabatt Prozent
sub rabattpz {
main::mprint($Callback::rabattpz . " %");
}
#rabattierte Summe
sub summe {
main::mprint(main::fp($Callback::summe));
}
#nächste Rabattstufe Betrag
sub nstep {
main::mprint(main::fp($Callback::nextstep));
}
#nächste Rabattstufe Prozentwert
sub nrabattpz {
main::mprint($Callback::nrabattpz . " %");
}
#gültige Rabattstafel anzeigen
sub showstaffel {
my $kdr = ssp::get_var_user("RABATTKLASSE");
my $out = "<table>\n";
for (my $i = 0; $i <= $#{$defs::staffelrab[$kdr]}; ++$i) {
$out .= "<tr>\n";
$out .= "<td>". main::fp($defs::staffelrab[$kdr]->[$i][0]) . "</td>\n";
if ($i != $#{$defs::staffelrab[$kdr]}) {
$out .= "<td>". " - ". main::fp($defs::staffelrab[$kdr]->[$i][1]) . "</td>\n";
} else {
$out .= "<td>". " - ". " " . "</td>\n";
}
$out .= "<td>". " ". $defs::staffelrab[$kdr]->[$i][2] . "%" . "</td>\n";
$out .= "</tr>\n";
}
main::mprint("$out" . "</table>\n");
}
-->
im Anhang der original Konfigurator Shop nur mit geändertem Rabattscript.