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:

  1. Kupons werden nun nur auf Produkte der gewählten Kategorie gerechnet.
  2. Kupons können nun auch von Kunden wieder gelöscht werden.
  3. Kupons werden korrekt berechnet nach Mengenänderungen im Warenkorb.
  4. Neukunden Kupons werden bei einem Neukunden automatisch eingelöst wenn diese im Admin-Panel aktiv sind.
    1. 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)

elseif ($Kupon->cWertTyp=="prozent")
{
       $maxPreisKupon = ($_SESSION["Warenkorb"]->gibGesamtsummeWarenExt( array( C_WARENKORBPOS_TYP_ARTIKEL ), true ) / 100.0) * $Kupon->fWert;
}


ersetzen durch

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)

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

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)

$_SESSION['Warenkorb']->erstelleSpezialPos($Spezialpos->cName, 1, $maxPreisKupon*-1, $Kupon->kSteuerklasse,$postyp);


ersetzen durch

$_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)

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

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)

//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

//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'] &amp;&amp; !$_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 &amp;&amp; $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 &amp;&amp; $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)

{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

{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}
 

Leave a Reply