Da die lieben Kupons doch gerne Probleme machen und ich am Wochenende 3 Stunden Zeit hatte habe ich mich mal dran gesetzt und folgende Probleme gelöst:
Folgende Schritte sind nötig:
1. includes/bestellvorgang_inc.php
1. Schritt (Zeile 806)
ersetzen durch
2. Schritt (Zeile 839)
ersetzen durch
3. Schritt (Zeile 869)
ersetzen durch
2. classes/class.JTL-Shop.Warenkorb.php (Zeile 195)
1. Schritt
ersetzen durch
3. warenkorb.php (Zeile 42)
1. Schritt
ersetzen druch
4. templates/JTL-Shop2/warenkorb.tpl (Zeile 53)
1. Schritt
ersetzen durch
Feedback ist erwünscht. Man weiß ja nie vielleicht hab ich ja doch noch was übersehen.
Gruß,
Alex
- 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)
PHP:
elseif ($Kupon->cWertTyp=="prozent")
{
$maxPreisKupon = ($_SESSION["Warenkorb"]->gibGesamtsummeWarenExt(array(C_WARENKORBPOS_TYP_ARTIKEL),true)/100.0)*$Kupon->fWert;
}
PHP:
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)
PHP:
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."%";
}
PHP:
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)
PHP:
$_SESSION['Warenkorb']->erstelleSpezialPos($Spezialpos->cName, 1, $maxPreisKupon*-1, $Kupon->kSteuerklasse,$postyp);
PHP:
$_SESSION['Warenkorb']->erstelleSpezialPos($Spezialpos->cName, 1, $maxPreisKupon*-1, $Kupon->kSteuerklasse,$postyp, true, $Spezialpos->kArtikel);
2. classes/class.JTL-Shop.Warenkorb.php (Zeile 195)
1. Schritt
PHP:
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);
}
PHP:
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 (Zeile 42)
1. Schritt
PHP:
//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);
}
PHP:
//Kupons bearbeiten
$customer_order = $GLOBALS["DB"]->executeQuery("select * from tbestellung where kKunde='".$_SESSION['Kunde']->kKunde."'",1);
if(!$customer_order)
{
$_SESSION['Warenkorb']->loescheSpezialPos(C_WARENKORBPOS_TYP_NEUKUNDENKUPON);
$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 (Zeile 53)
1. Schritt
Code:
{if $Position->nPosTyp==1}
<a href="warenkorb.php?dropPos={$smarty.foreach.positionen.index}&{$SID}"><img alt="" src="{$currentTemplateDir}gfx/button_PosEntfernen.gif"></a>
{/if}
Code:
{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}
Feedback ist erwünscht. Man weiß ja nie vielleicht hab ich ja doch noch was übersehen.
Gruß,
Alex