Kupon-Fix | GMAlex

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}