Rabattstufen

Begonnen von MichaelSchmitt, April 14, 2009, 09:18:49

« vorheriges - nächstes »

0 Mitglieder und 1 Gast betrachten dieses Thema.

MichaelSchmitt

Hallo,

ich suche eine Möglichkeit, einzelnen Kunden einen Rabatt zu geben. Dieser Rabatt soll je nach Bestellhöhe gestaffelt werden. Es soll zusätzlich auch für solche Kunden einen Mindestbestellwert geben.

Den Mindestbestellwert kann ich über ein Benutzerdefiniertes Feld festlegen, und es diesen Kunden erst dann erlauben zu bestellen, wenn gilt
ssp::get_cart_wkprodsum () > Mindestbestellwert

Eine Rabattstufe kann ich bei jedem Kunden über die Felder 'Kundenspezifischer Rabatt' oder 'Preisfaktor' einstellen.

Aber wie kann ich für einen Kunden eine zweite oder dritte Rabattstufe abhängig von der Bestellhöhe gewähren (z.B. ab 500 EUR  20% Rabatt, ab 1000 EUR 25% Rabatt, ...)?

Über Tipps würde ich mich freuen,
Michael

dobra

Hallo Michael,

schau Dir mal im Konfigurator Shop die stdcart.ipl an.
Hier sind 2 unterschiedliche Rabattstaffeln für die beiden Subkataloge eingetragen.

Sollte gehen, daß man hier statt nach Subcats auch nach Kundengruppen differenziert.
Also Du legst ein ben.def. Kundenfeld an, in dem Du den Kunden Staffelgruppen zuweist.
z.B. bei Kunde A steht in diesem Feld "3" -> für ihn gilt dann die Rabattstaffel 3
Kunde B - "5" -> Rabattstaffel 5
steht nichts in dem Feld, gelten die allgemeinen Bedingungen.

Habs nicht getestet, aber vielleicht hilft das mal als Denkanstoß?
mfG
dobra

dobra

#2
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("-&nbsp;" . main::fp($Callback::rabatt));
}

#Gesamtrabatt Prozent
sub rabattpz {
main::mprint($Callback::rabattpz . "&nbsp;%");
}

#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 . "&nbsp;%");
}

#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.
mfG
dobra

MichaelSchmitt

Hallo Dobra,

vielen Dank für die Tipps. Mit der stdcart.ipl aus dem Konfiguratorshop funktioniert das perfekt. Die Rabattklassen kann man auch wie angegeben beim Kunden hintlegen.

Viele Grüße
Michael