Hallo,
Wenn Promotion GS (z.B. per Newsletter) versendet werden, ist das ja i.d.R. nur EIN GS-Code den alle bekommen.
= "Anzahl begrenzen" ist nicht aktiviert.
Wie kann man also erreichen, dass jeder Kunde diesen GS
nur einmal einlösen kann ?
Mit ein bisschen ssp geht's
(leider funktioniert meine Lösung aber nur bei eingeloggte Kunden - im Script können nicht eingeloggte Kunden den GS
nicht einlösen)
Änderungen im WC:1) ein ben.def. Kundenfeld "XGS" anlegen
2) unter Datenbank -> Optionen -> Datenfelder/Repliz. Datenreplizierung abschalten "für Kundendaten" anhaken !
Das ist
wichtig da das XGS-Feld sonst bei jedem DB neu anlegen überschrieben würde = der Kunde den beireits eingelösten GS doch nochmals einlösen könnte.
Scripte:in der Warenkorb-Vorlage im head-Bereich
<!--spmacro:module(test)
sub gssuchen {
my $index = $_[0];
my $anzahl = $_[1];
if ($index <= $anzahl) {
for ($i=0;$i<=$anzahl;$i++) {
my $wert = ssp::get_var_cart('id',$i);
if ($wert =~ /_GS_/) {
ssp::cart_write_var('gsimwk', $wert);
} else {
ssp::cart_write_var('gsimwk', 0);
}
}
}
}
-->
__test::gssuchen__
hier wird abgefragt ob ein GS im WK liegt und wenn ja wird der Code in die cart-Datei geschrieben um ihn nachher auf der Danke-Seite abgerufen zu können.
"Danke" Seite (ebenfalls im head Bereich)
<!--spmacro:module(Callback)
sub begin_read_template {
if ($ssp::xxsession != 4711471147) {
my $pre = ssp::db_get_prefix();
my $USR = $pre . "USR";
my $kdnr = ssp::get_var_user("kundennr");
my $wert = ssp::cart_read_var('gsimwk');
if ($wert =~ /_GS_/) {
my $count = ssp::readSQLData("SELECT XGS FROM $USR WHERE KUNDENNR='$kdnr'","XGS");
my $oldwert = ssp::get_var_db("XGS",0);
$wert = "$oldwert : $wert";
my $sql = qq|UPDATE $USR SET XGS = "$wert" WHERE KUNDENNR = $kdnr|;
ssp::exec_sql($sql, 1);
ssp::db_update_usr($kdnr,"XGS",$wert)
}
}
}
-->
der eingelöste GS-Code wird in das neue XGS-Kundenfeld geschrieben.
Steht hier bereits ein Code, wird der neue mit ":" getrennt angehängt.
in stdplacecart.ipl
(falls nicht vorhanden - anlegen und nicht vergessen in die "Dateien hinzufügen" Liste eintrage)
<!--spmacro:module(gutschein) {
my $kdnr = ssp::get_var_user('kundennr');
my $pre = ssp::db_get_prefix();
my $USR = $pre . "USR";
my $count = ssp::readSQLData("SELECT XGS FROM $USR WHERE KUNDENNR='$kdnr'","XGS");
my $kdgs = ssp::get_var_db("XGS",0);
my $item = ssp::qform(ssp::get_var_form('directItem'));
if ($kdgs =~ /$item/ || $kdnr eq "undefined") {
ssp::set_var_form("directItem",nixGS);
}
}
-->
Abfrage ob Kunde diesen GS bereits eingelöst hat.
Wenn "ja" wird directItem einfach auf eine nicht vorhandene Artikelnummer("nixGS") gesetzt, so dass "ungültiger Gutschein" ausgegeben wird.
ACHTUNG:
Damit das Script auch bei mehreren GS funktioniert und nicht der Promotion-GS überschrieben wird wenn der Kunde bei einer nächsten Bestellung einen anderen GS einlöst, werden
alle eingelösten GS mit =~ (ist enthalten) abgefragt.
Wenn der Kunde also z.B. den Gutschein _GS_1234 bereits eingelöst hat, kann auch _GS_123 nicht mehr eingelöst werden da dieser Code ja in _GS_1234 enthalten ist.
@ support
gibt es eine Lösung die auch für nicht eingeloggte Kunden funktioniert ? (
)
Linkback: https://www.shoppilot.net/pf/index.php?topic=1636.0