Promotion GS soll pro Kunde nur 1x eingelöst werden können

Begonnen von dobra, November 24, 2012, 23:42:44

« vorheriges - nächstes »

0 Mitglieder und 1 Gast betrachten dieses Thema.

dobra

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 ?  (::))
mfG
dobra