Gratiszugaben nach Staffeln im Warenkorb

Begonnen von ms, Mai 20, 2010, 09:34:02

« vorheriges - nächstes »

0 Mitglieder und 1 Gast betrachten dieses Thema.

ms

Hallo!

Um den Kunden etwas gratis zu geben kann man ja die Gutscheine benutzen und diese an einen Mindestbestellwert knüpfen.
Wir wollten ein System, bei dem verschiedene Staffeln möglich sind.

z.B. ab 49,00€, ab 100,00€, ab 250,00€ und und und

Je nach Warenwert sollen die Gratiszugaben gleich im Warenkorb ausgewählt werden können aber bei noch nicht erreichter Staffel schon angezeigt um den Kunden einen Kaufanreiz zu geben.
Wir haben auch festgelegt, dass in jeder Staffel mindestens 2 Artikel zur Auswahl stehen müssen.
Darüber hinaus sollen die Gratiszugaben ganz normale Artikel sein. Wir haben Shoppilot mit komplett mit der Warenwirtschaft "voll automatisiert" gekoppelt und wollen die Zugaben auch darüber pflegen.
Weiterhin sind sie dann gleich auf dem Vorgang beim automatischen Einlesen der Aufträge (wichtig für Packzettel u.s.w).
Wichtig ist auch noch, dass diese Funktion für bestimmte Kunden gezielt deaktiviert werden kann.
Wenn diese z.B. ein schon stark verhandeltes Sortiment mir eigenem Subkatalog haben.

Umgesetzt habe ich das bisher so:

Ein benutzerdefiniertes Datenfeld für Kunden __KEINEGZ__

Eine separate Produkt- und Detailseite für die Gratiszugaben. Dort fehlen die Funktionen ,,in den Warenkorb", ,,Merkzettel"...

In meinem ,,show.ipl" – Script 4 neue Funktionen für die Warenkorbseite:

__show::gz__
Gratiszugaben anzeigen

__show::anzahl__
Mengenänderung im Warenkorb dynamisch anzeigen. Also wenn es sich um eine Gratiszugabe handelt, kann die Menge nicht geändert werden aber die Position gelöscht.

__show::bestellen__ und __zhinweis__
Diese werden benötigt um das Austrixen zu verhindern. Wenn der Kunde nachdem er eine Gratiszugabe in den Warenkorb gelegt hat den Warenwert wieder verringert, muss man darauf reagieren.
Genau so, wenn der den Warenwert noch erhöht und eigentlich was ,,besseres" bekommen könnte.

Hier die Funktionen dazu. Die kann man sicher noch viel schöner machen aber es funktioniert erstmal. Ich werde sie noch ,,vereinfachen" und etwas ,,normalisieren". Weitere Staffeln kommen auch noch.
Das System ist auf jeden Fall nach oben offen...


## Gratiszugaben im Warenkorb ausgeben
sub gz {

## prüfen ob Kunde für Gratiszugaben gesperrt ist
## wenn ja - abbrechen
if (length($main::userid)) {
my $gz = ssp::get_var_user("KEINEGZ");
if ($gz == 1) {
return;       
}
}

my $itemid = "";
my $descr = "";
my $preis = "";
my $img = "";
my $html = "";
my $warenwert = main::fp(ssp::get_wkprodsum);

my $anzahl = ssp::get_cart_items();

## prüfen ob schon eine Gratiszugabe im warenkorb liegt
## wenn ja - abbrechen
    for (my $i=0;$i<=$anzahl;$i++) {
      my $item = ssp::get_var_cart('id',$i);
    if ($item =~ /^GZ-/) {
return; # Gratiszugabe schon im Warenkorb
        }
}

## 100,00€ Staffel prüfen
if($warenwert >= 100) {
my $count = ssp::readSQLData("SELECT PGID, ITEMID, DESCR, IMG FROM ITEM WHERE PGID=238","PGID","ITEMID","DESCR","IMG");
## prüfen ob mindestens 2 Gratiszugaben zur Auswahl stehen
if ($count >= 1) {
            my $i=0;

main::mprint ( qq| Der Warenwert ist größer 100,00€. Sie können eine Gratiszugabe wählen:<br><br> <table width="100%" border="0" cellspacing="0" cellpadding="0"><tr>| );

            while ($count > $i) {
$itemid = ssp::get_var_db('ITEMID',$i);
                $descr = ssp::get_var_db("DESCR",$i);
                $img = ssp::get_var_db("IMG",$i);
## Gratiszugaben aus dieser Kategorie anzeigen und auswählbar machen
main::mprint ( qq|
<td>
<form method="Post" name="direkteingabe" action="__xxpath__?placecart0,__xxsession__">
<input type="hidden" name="directItem" value="$itemid">
<input type="hidden" name="directCount" value="1">
<table width="320" border="0" cellspacing="0" cellpadding="0">
<tr>
<td width="110" align="middle"><input name="submit" type=image src="../$img" align="middle" higth="50"></td>
<td width="210">$descr</td>
</tr>
</table>
</form>
</td>
|);

                ++$i;
               }
  main::mprint ( qq|</tr></table> | );
}

return;
}

## 49,00€ Staffel prüfen
if($warenwert >= 49) {

main::mprint ( qq| <table width="100%" border="0" cellspacing="0" cellpadding="0"><tr><td colspan="2">Der Warenwert ist größer 49,00€. Sie können eine Gratiszugabe wählen:<br><br></td></tr><tr> | );
my $count = ssp::readSQLData("SELECT PGID, ITEMID, DESCR, IMG FROM ITEM WHERE PGID=237","PGID","ITEMID","DESCR","IMG");
## prüfen ob mindestens 2 Gratiszugaben zur Auswahl stehen
if ($count >= 1) {
            my $i=0;

            while ($count > $i) {
$itemid = ssp::get_var_db('ITEMID',$i);
                $descr = ssp::get_var_db("DESCR",$i);
                $img = ssp::get_var_db("IMG",$i);
## Gratiszugaben dieser Kategorie anzeigen und auswählbar machen
main::mprint ( qq|
<td valign="top">
<form method="post" name="direkteingabe" action="__xxpath__?placecart0,__xxsession__">
<input type="hidden" name="directItem" value="$itemid">
<input type="hidden" name="directCount" value="1">

<table width="320" border="0" cellspacing="0" cellpadding="0">
<tr>
<td align="middle" width="110"><input name="submit" type=image src="../$img"></td>
<td width="210">$descr</td>
</tr>
</table>
</form>
</td>
|);

                ++$i;

}

## Dem Kunde, wenn er in der 49,00€ Staffel ist bereits die 100,00€ Staffel schmackhaft machen aber nicht auswählbar
main::mprint ( qq| </tr><tr><td colspan="2">Ab 100,00€ Warenwert stehen folgenden Gratiszugaben zur Auswahl:<br><br></td></tr><tr> | );

my $count = ssp::readSQLData("SELECT PGID, DESCR, IMG FROM ITEM WHERE PGID=238","PGID","DESCR","IMG");
## prüfen ob mindestens 2 Gratiszugaben zur Auswahl stehen
if ($count >= 1) {
my $i=0;

while ($count > $i) {
$descr = ssp::get_var_db("DESCR",$i);
$img = ssp::get_var_db("IMG",$i);
## Gratiszugaben dieser Kategorie nur anzeigen
main::mprint ( qq|
<td valign="top">
<form>
<table width="320" border="0" cellspacing="0" cellpadding="0">
<tr>
<td align="middle" width="110"><img border="0" src="../$img"></td>
<td width="210">$descr</td>
</tr>
</table>
</form>
</td>
|);

++$i;
}
}
main::mprint ( qq| </td></tr></table> | );

}
return;

}

## Dem Kunde, wenn er unter 49,00€ im Warenkorb hat die 49,00€ Staffel schmackhaft machen aber nicht auswählbar
my $count = ssp::readSQLData("SELECT PGID, DESCR, IMG FROM ITEM WHERE PGID=237","PGID","DESCR","IMG");
## prüfen ob mindestens 2 Gratiszugaben zur Auswahl stehen
if ($count >= 1) {
my $i=0;

main::mprint ( qq| Ab 49,00€ Warenwert können Sie eine aus diesen Gratiszugaben wählen:<br><br> <table width="100%" border="0" cellspacing="0" cellpadding="0"><tr>| );

while ($count > $i) {
$descr = ssp::get_var_db("DESCR",$i);
$img = ssp::get_var_db("IMG",$i);
## Gratiszugaben dieser Kategorie nur anzeigen
main::mprint ( qq|
<td>
<table width="300" border="0" cellspacing="0" cellpadding="0">
<tr>
<td width="110" align="middle"><img border="0" src="../$img"></td>
<td width="210">$descr</td>
</tr>
</table>
</td>
|);

++$i;
}
main::mprint ( qq|</tr></table> | );
}

}

## Mengenänderung im Warenkorb anzeigen und bei Gratiszugaben nur löschen erlauben
sub anzahl {

my $index = $_[0];

    my $item = ssp::get_var_cart('id',$index);
    if ($item =~ /^GZ-/) {
## Gratiszugabe schon im Warenkorb
## nur löschen erlauben
main::mprint ( qq| <div align="right">__wkposloesch__</div> | );
return;
        }

main::mprint ( qq| <table border="0" align="center" cellpadding="0" cellspacing="0">
<tr>
                                <form method="POST" action=__xanzaendern__>
                                <td width="10"></td>
                                <td width="10" valign="top"><input  class="textfeld" name="__xid__" size="3" maxlength="3" value="__anzahl__">
                                </td>
                                <td width="10" valign="top"> <input name="image3" title="Anzahl aktualisieren"type=image value="ändern" src="../images/layout/wk_anzaendern.gif"></td>
                                </form>
                                <td width="10" valign="top">__wkposloesch__</td>
                            </tr>
                        </table>| );
 
}

## Bestellknopf anzeigen
sub bestellen {

my $warenwert = main::fp(ssp::get_wkprodsum);

my $anzahl = ssp::get_cart_items();

    for (my $i=0;$i<=$anzahl;$i++) {
      my $item = ssp::get_var_cart('id',$i);
my $page = ssp::get_var_cart('pgid',$i);
    if ($item =~ /^GZ-/) {

## Irgendeine Gratiszugabe im Warenkorb aber Warenwert unter 49€
if ($warenwert < 49) {
return;
}

## Gratiszugabe aus >= 100€ im Warenkorb aber Warenwert < 100€
if ($warenwert >=49 and $warenwert < 100){
if ($page == 237)  {
main::mprint ("__sbestellen__");
return;
}
if ($page == 238){
return;
}
}

## Gratiszugabe aus >= 49€ im Warenkorb aber Warenwert > 100€ also Warenwert wurde nachträglich erhöht
if ($warenwert > 100){
if ($page == 237)  {
main::mprint ("__sbestellen__");
return;
}
if ($page == 238){
main::mprint ("__sbestellen__");
return;
}
}
        }
}

main::mprint ("__sbestellen__");
}

## Hinweis unberechtigte Gratiszugabe
## Seite 237: Artikel der 49,00€ Staffel
## Seite 238: Artikel der 100,00€ Staffel
sub zhinweis {

my $warenwert = main::fp(ssp::get_wkprodsum);

my $anzahl = ssp::get_cart_items();

    for (my $i=0;$i<=$anzahl;$i++) {
      my $item = ssp::get_var_cart('id',$i);
my $page = ssp::get_var_cart('pgid',$i);
    if ($item =~ /^GZ-/) {

## Irgendeine Gratiszugabe im Warenkorb aber Warenwert unter 49€
if ($warenwert < 49) {
main::mprint ( qq| Sie haben den Warenwert wieder verringert, nachdem eine Gratiszugabe in den Warenkorb gelegt wurde.<br>
   Bitte entfernen Sie diese oder erhöhen den Bestellwert. Erst dann kann die Bestellung fortgesetzt werden.| );
return;
}

## Irgendeine Gratiszugabe im Warenkorb aber Warenwert unter 100€
if ($warenwert < 100) {
if ($page == 237){
return;
}
if ($page == 238)  {
main::mprint ( qq| Sie haben den Warenwert wieder verringert, nachdem eine Gratiszugabe in den Warenkorb gelegt wurde.<br>
   Bitte entfernen Sie diese oder erhöhen den Bestellwert. Erst dann kann die Bestellung fortgesetzt werden.| );
return;
}

}

## Gratiszugabe aus >= 100€ im Warenkorb aber Warenwert < 100€
if ($warenwert >=49 and $warenwert < 100){
if ($page == 237){
return;
}
if ($page == 238)  {
main::mprint ( qq| Sie haben den Warenwert erhöht, nachdem eine Gratiszugabe in den Warenkorb gelegt wurde.<br>
   Sie können diese entfernen und dann eine höherwertige wählen oder die gewählte mitbestellen.| );
return;
}
}

## Gratiszugabe aus >= 49€ im Warenkorb aber Warenwert > 100€ also Warenwert wurde nachträglich erhöht
if ($warenwert > 100){
if ($page == 237){
main::mprint ( qq| Sie haben den Warenwert erhöht, nachdem eine Gratiszugabe in den Warenkorb gelegt wurde.<br>
   Sie können diese entfernen und dann eine höherwertige wählen oder die gewählte mitbestellen.| );
return;
}
if ($page == 238)  {
return;
}
}
        }
}
}


Bitte sagt mal Eure Meinung dazu. Kann man das so in der Art machen oder gibt es einen besseren Weg?
"Getestet" werden kann unter www.buerowalther.de. Einfach mal den Warenkorb mit "bestimmten Summen" füllen.
Die Zugaben sind zusätzlich links im Menü unter Aktion.


Schöne Grüße aus dem Vogtland!

Marcel

dobra

mfG
dobra