Gambio Warenkorb

Löst ein Kunde eines Gambio-Shops einen Gutschein ein, in dem er den Gutschein-Code im Warenkorb eingibt, wird dieser zwar verarbeitet, jedoch in der Summenaufstellung im Warenkorb nicht in Abzug gebracht. Besser hinsichtlich User-Experience und Conversion-Rate ist es hier, den angewendeten Rabatt direkt anzuzeigen. Hier ein Lösungsvorschlag für Gambio in der Version GX2:

 

 1) Warum alles selber machen? Wir holen uns zur Vorbereitung unseres Vorhabens das Gambio-Plugin "Gutscheinanzeige im Warenkorb" von Alkim Media (übrigens sehr netter Kontakt) und laden die Verzeichnisse 

 

\user_classes\overloads\OrderDetailsCartContentView\

 

und

 

\user_classes\overloads\ShoppingCartDropdownBoxContentView\

 

in unser Hauptverzeichnis, sowie die Dateien

 

\lang\german\gutschein_anzeige.conf

 

und

 

\templates\EyeCandy\boxes\box_cart_dropdown-USERMOD.html

 

Bei letzterer natürlich das passende Template-Verzeichnis auswählen bzw. die bestehende Datei manuell anpassen gemäß Plugin-Datei, wenn bereits andere Modifiktaionen vorhanden (wie in unserer Installation der Fall). Dasselbe gilt dann für die Datei

 

\templates\EyeCandy\module\order_details-USERMOD.html

 

Nun noch Datei

 

\templates\EyeCandy\usermod\css\alkimmediafix.css

 

in das passende Templateverzeichis kopieren und wir sind schon recht weit.

 

2) Wir müssen nun noch darauf achten, dass auch der Express-Checkout von PayPal aus dem Warenkorb heraus funktioniert (falls aktiviert, wenn nicht, gehe zu Punkt 3). Mit den aktuellen Änderungen wird (falls nur die Gesamtsumme aktualisiert wird) eine Ablehnung der PayPal-Prüfung hervorgerufen, da die Artikelsumme nicht gleich der Gesamtsumme ist, d.h. die Summe der einzelnen Artikel ist eben um den reduzierten Betrag höher als die reduzierte Gesamtsumme. Die Lösung für dieses Problem kennen wir auch aus anderen Shopsystemen (unter anderem aus dem Magento-Onestepcheckout): Wir fügen dem Warenkorb vor der Übermittlung an PayPal einen zusätzlichen Artikel mit negativem Preis in Höhe des Rabattes hinzu, der die Differenz von Summe der Artikel und Gesamtsumme ausgleichen kann. Hierzu ändern wir die Datei

 

\gm\classes\GMPayPal.php

 

bzw. den passenden Override:

 

Zuerst übergeben wir an PayPal die reduzierte Gesamtsumme. Nach (ca. Zeile 310)

 

// items
unset($_SESSION['shipping']);

 

ersetzen wir den bestehenden Code mit

 

if (isset($_SESSION['customer_id']) && $_SESSION['cc_id']) {
global $order;
$order = new order();
require_once (DIR_WS_CLASSES . 'order_total.php');
$order_total_modules = new order_total();
$order_total_modules->collect_posts();
$order_total_modules->pre_confirmation_check();
$order_total_modules->process();
} else {
$order = new order();
}

 

Danach fügen wir den Pseudo-Artikel hinzu (nach Einfügen des oben aufgeführten Teiles ca. Zeile 475), somit ersetzen wir nach

 

else if($remainingTotal < 0) {
// discount
$itemAmount = new BasicAmountType($currencyCode, self::_formatAmount($remainingTotal));
$itemDetails = new PaymentDetailsItemType();
$itemDetails->Name = $this->transcodeOutbound($this->get_text('discount'));
$itemDetails->Amount = $itemAmount;
$itemDetails->Quantity = 1;
$t_paymentdetailsitem[] = $itemDetails;
$itemTotal += $remainingTotal;
}

 

die bestehenden Zeilen mit

 

if(array_key_exists('deduction', $p_order->info))
{
// deduction
$deduction = -$p_order->info['deduction'];
$itemAmount = new BasicAmountType($currencyCode, self::_formatAmount($deduction));
$itemDetails = new PaymentDetailsItemType();
$itemDetails->Name = $this->transcodeOutbound($this->get_text('discount'));
$itemDetails->Amount = $itemAmount;
$itemDetails->Quantity = 1;
$t_paymentdetailsitem[] = $itemDetails;
$itemTotal += $deduction;
}

 

So wird der Artikel hinzugefügt und die PayPal-Prüfung funktioniert nun ohne Probleme.

 

3) Fertig.