Kupon-Fix
Da die lieben Kupons doch gerne Probleme machen und ich am Wochenende Zeit hatte habe ich mich mal dran gesetzt und folgende Probleme gelöst:
- Kupons werden nun nur auf Produkte der gewählten Kategorie gerechnet.
- Kupons können nun auch von Kunden wieder gelöscht werden.
- Kupons werden korrekt berechnet nach Mengenänderungen im Warenkorb.
- Neukunden Kupons werden bei einem Neukunden automatisch eingelöst wenn diese im Admin-Panel aktiv sind.
- Sind zwei Neukunden Kupons aktiv dann wird der genommen für den die Mindestbestellmenge erfüllt ist. Bsp.: 1. Kupon 5€ bei 20€ MBW, 2. Kupon 10€ bei 40€MBW, 3. Kupon 15€ bei 60€. Bestellungswert 50€ -> 2.Kupon
Folgende Schritte sind nötig:
1. includes/bestellvorgang_inc.php
1. Schritt (Zeile 806)
1 2 3 4 | elseif ($Kupon->cWertTyp=="prozent") { $maxPreisKupon = ($_SESSION["Warenkorb"]->gibGesamtsummeWarenExt( array( C_WARENKORBPOS_TYP_ARTIKEL ), true ) / 100.0) * $Kupon->fWert; } |
ersetzen durch
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | elseif ($Kupon->cWertTyp=="prozent") { if($Kupon->cKategorien!='-1') { $PositionenArr = $_SESSION['Warenkorb']->PositionenArr; if (is_array($PositionenArr)) { foreach ($PositionenArr as $Pos) { $categorys =$GLOBALS["DB"]->executeQuery(" SELECT * FROM tkategorieartikel WHERE kArtikel = ".$Pos->kArtikel, 2); $onematch = false; foreach ($categorys as $cur_cat) { if (eregi($cur_cat->kKategorie.";",$Kupon->cKategorien) AND !$onematch) { $maxPreisKupon+= ( ( berechneBrutto( $Pos->fPreis*$Pos->nAnzahl, gibUst( $Pos->kSteuerklasse ) ) ) / 100 ) * $Kupon->fWert; $onematch = true; } } } } } else { $maxPreisKupon = ( $_SESSION["Warenkorb"]->gibGesamtsummeWarenExt( array( C_WARENKORBPOS_TYP_ARTIKEL ), true ) / 100.0 ) * $Kupon->fWert; } } |
2. Schritt (Zeile 839)
1 2 3 4 5 6 7 | foreach ($_SESSION["Sprachen"] as $Sprache) { $name_spr = $GLOBALS["DB"]->executeQuery("select cName from tkuponsprache where kKupon=$Kupon->kKupon and cISOSprache=\"".$Sprache->cISO."\"",1); $Spezialpos->cName[$Sprache->cISO] = $name_spr->cName; if ($Kupon->cWertTyp=="prozent") $Spezialpos->cName[$Sprache->cISO].=" ".$Kupon->fWert."%"; } |
ersetzen durch
1 2 3 4 5 6 7 8 | foreach ($_SESSION["Sprachen"] as $Sprache) { $name_spr = $GLOBALS["DB"]->executeQuery("select cName from tkuponsprache where kKupon=$Kupon->kKupon and cISOSprache=\"".$Sprache->cISO."\"",1); $Spezialpos->cName[$Sprache->cISO] = $name_spr->cName; $Spezialpos->kArtikel = $Kupon->cCode; if ($Kupon->cWertTyp=="prozent") $Spezialpos->cName[$Sprache->cISO].=" ".$Kupon->fWert."%"; } |
3. Schritt (Zeile 869)
1 | $_SESSION['Warenkorb']->erstelleSpezialPos($Spezialpos->cName, 1, $maxPreisKupon*-1, $Kupon->kSteuerklasse,$postyp); |
ersetzen durch
1 | $_SESSION['Warenkorb']->erstelleSpezialPos($Spezialpos->cName, 1, $maxPreisKupon*-1, $Kupon->kSteuerklasse,$postyp, true, $Spezialpos->kArtikel); |
2. classes/class.JTL-Shop.Warenkorb.php
1. Schritt ( Zeile 195)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | function erstelleSpezialPos($name, $anzahl, $preis, $kSteuerklasse, $typ, $brutto=true) { $this->loescheSpezialPos($typ); $NeuePosition = new WarenkorbPos(); $NeuePosition->nAnzahl = $anzahl; $NeuePosition->kArtikel = 0; $NeuePosition->kSteuerklasse = $kSteuerklasse; $NeuePosition->fPreis = $preis; if ($brutto) $NeuePosition->fPreis = ($preis/(100+gibUst($kSteuerklasse))*100.0); $NeuePosition->fPreisEinzelNetto = $NeuePosition->fPreis; if (is_array($_SESSION['Waehrungen'])) { foreach ($_SESSION['Waehrungen'] as $Waehrung) { $NeuePosition->cGesamtpreisLocalized[0][$Waehrung->cName] = gibPreisStringLocalized( berechneBrutto( $NeuePosition->fPreis * $anzahl, gibUst($kSteuerklasse) ), $Waehrung); $NeuePosition->cGesamtpreisLocalized[1][$Waehrung->cName] = gibPreisStringLocalized( $NeuePosition->fPreis * $anzahl, $Waehrung); } } $NeuePosition->cName = $name; $NeuePosition->nPosTyp = $typ; array_push($this->PositionenArr, $NeuePosition); } |
ersetzen durch
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | function erstelleSpezialPos($name, $anzahl, $preis, $kSteuerklasse, $typ, $brutto=true, $extravar=null) { $this->loescheSpezialPos($typ); $NeuePosition = new WarenkorbPos(); $NeuePosition->nAnzahl = $anzahl; if(isset($extravar)) $NeuePosition->kArtikel = $extravar; else $NeuePosition->kArtikel = 0; $NeuePosition->kSteuerklasse = $kSteuerklasse; $NeuePosition->fPreis = $preis; if ($brutto) $NeuePosition->fPreis = ($preis/(100+gibUst($kSteuerklasse))*100.0); $NeuePosition->fPreisEinzelNetto = $NeuePosition->fPreis; if (is_array($_SESSION['Waehrungen'])) { foreach ($_SESSION['Waehrungen'] as $Waehrung) { $NeuePosition->cGesamtpreisLocalized[0][$Waehrung->cName] = gibPreisStringLocalized( berechneBrutto($NeuePosition->fPreis * $anzahl, gibUst($kSteuerklasse)), $Waehrung); $NeuePosition->cGesamtpreisLocalized[1][$Waehrung->cName] = gibPreisStringLocalized( $NeuePosition->fPreis * $anzahl, $Waehrung); } } $NeuePosition->cName = $name; $NeuePosition->nPosTyp = $typ; array_push($this->PositionenArr, $NeuePosition); } |
3. warenkorb.php
1. Schritt (Zeile 42)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | //Kupons bearbeiten if ($_POST['Kuponcode'] && !$_SESSION['Warenkorb']->posTypEnthalten(C_WARENKORBPOS_TYP_KUPON)) { $Kupon = $GLOBALS["DB"]->executeQuery("select * from tkupon where cCode='".$GLOBALS["DB"]->escape($_POST['Kuponcode'])."'",1); if ($Kupon->kKupon>0 && $Kupon->cKuponTyp=="standard") { $Kuponfehler = checkeKupon($Kupon); if (angabenKorrekt($Kuponfehler)) { kuponAnnehmen($Kupon); } } else $smarty->assign('KuponcodeUngueltig',1); } |
ersetzen durch
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 | //Kupons bearbeiten $_SESSION['Warenkorb']->loescheSpezialPos(C_WARENKORBPOS_TYP_NEUKUNDENKUPON); $customer_order = $GLOBALS["DB"]->executeQuery("select * from tbestellung where kKunde='".$_SESSION['Kunde']->kKunde."'",1); if(!$customer_order AND $_SESSION['Kunde']->kKunde) { $Kupon = $GLOBALS["DB"]->executeQuery(" SELECT * FROM tkupon WHERE cKuponTyp='neukundenkupon' AND cAktiv='Y' AND fMindestbestellwert <= ".$_SESSION["Warenkorb"]->gibGesamtsummeWarenExt( array( C_WARENKORBPOS_TYP_ARTIKEL ), true )." ORDER BY fMindestbestellwert DESC LIMIT 1",1); $Kuponfehler = checkeKupon($Kupon); if (angabenKorrekt($Kuponfehler)) { kuponAnnehmen($Kupon); } } if ($_POST['Kuponcode'] && !$_SESSION['Warenkorb']->posTypEnthalten(C_WARENKORBPOS_TYP_KUPON)) { $Kupon = $GLOBALS["DB"]->executeQuery("select * from tkupon where cCode='".$GLOBALS["DB"]->escape($_POST['Kuponcode'])."'",1); if ($Kupon->kKupon>0 && $Kupon->cKuponTyp=="standard") { $Kuponfehler = checkeKupon($Kupon); if (angabenKorrekt($Kuponfehler)) { kuponAnnehmen($Kupon); } } else $smarty->assign('KuponcodeUngueltig',1); } else { foreach ($_SESSION['Warenkorb']->PositionenArr as $i => $Position) { if ($Position->nPosTyp==C_WARENKORBPOS_TYP_KUPON) { $Kupon = $GLOBALS["DB"]->executeQuery("select * from tkupon where cCode='".$Position->kArtikel."'",1); $_SESSION['Warenkorb']->loescheSpezialPos(C_WARENKORBPOS_TYP_KUPON); if(!$_GET['dropKupon']) { if ($Kupon->kKupon>0 && $Kupon->cKuponTyp=="standard") { $Kuponfehler = checkeKupon($Kupon); if (angabenKorrekt($Kuponfehler)) { kuponAnnehmen($Kupon); } } else $smarty->assign('KuponcodeUngueltig',1); } } } } |
4. templates/JTL-Shop2/warenkorb.tpl
1. Schritt (Zeile 45)
1 2 3 | {if $Position->nPosTyp==1} <a href="warenkorb.php?dropPos={$smarty.foreach.positionen.index}&{$SID}"><img alt="" src="{$currentTemplateDir}gfx/button_PosEntfernen.gif"></a> {/if} |
ersetzen durch
1 2 3 4 5 6 7 8 9 10 | {if $Position->nPosTyp==1} <a href="warenkorb.php?dropPos={$smarty.foreach.positionen.index}&{$SID}"> <img alt="" src="{$currentTemplateDir}gfx/button_PosEntfernen.gif" /> </a> {/if} {if $Position->nPosTyp==3} <a href="warenkorb.php?dropKupon=1&{$SID}"> <img alt="" src="{$currentTemplateDir}gfx/button_PosEntfernen.gif" /> </a> {/if} |