KonstiKonsti MemberComments: 0 Received thanks: 0 Member since: September 2016 edited February 2017

Hallo Shopware Community,

ich habe ein Plugin erstellt welches den Benutzer vor dem Checkout fragt in welcher Filiale er seine Bestellung abholen möchte. Dies passiert über ein Select Feld. Die gewählte Option wird dann in das Freitextfeld „attribut2“ gespeichert.

Wird als Zahlungsmethode Vorkasse gewählt so funktioniert das Plugin auch einwandfrei.

Wenn ich nun allerdings über PayPal bezahle kriege ich nach Abschluss der Zahlung und Rückkehr in den Shop nicht mehr die entsprechende POST Variable.
Dadurch bleibt das Freitextfeld leer.

Meine Frage ist nun wie ich an diese Parameter dran komme nach der Rückkehr von Paypal. Werden die Bestelldaten irgendwo zwischengespeichert?

Ich benutze Shopware 5.2.16

Meine Bootstrap.php:

<?php
class Shopware_Plugins_Frontend_PickUpDepartmentSelect_Bootstrap
extends Shopware_Components_Plugin_Bootstrap
{
    public function getCapabilities()
    {
        return array(
            'install' => true,
            'update' => true,
            'enable' => true
        );
    }

    public function getLabel()
    {
        return 'Auswahl der Abholfiliale';
    }

    public function getVersion()
    {
        return '1.0.0';
    }

    public function getInfo()
    {
        return array(
            'version' => $this->getVersion(),
            'label' => $this->getLabel(),
            'author' => 'XXX',
            'supplier' => 'XXX',
            'description' => 'Auswahl der Abholfiliale auf der Bestätigungsseite des Bestellabschlusses',
            'support' => 'XXX',
            'link' => 'XXX'
        );
    }

    public function install()
    {
        $this->registerEvents();
        return array('success' => true, 'invalidateCache' => array('frontend'));
    }

    public function uninstall()
    {
        return array('success' => true, 'invalidateCache' => array('frontend'));
    }

    private function registerEvents()
    {
        $this->subscribeEvent('Enlight_Controller_Action_PreDispatch_Frontend_Checkout','onPreDispatchCheckout');
        $this->subscribeEvent('Enlight_Controller_Action_PostDispatch_Frontend_Checkout','onPostDispatchCheckout');
        $this->subscribeEvent('Theme_Compiler_Collect_Plugin_Less','onCollectLessFiles');
        $this->subscribeEvent('Theme_Compiler_Collect_Plugin_Javascript','onCollectJsFiles');
        $this->subscribeEvent('sOrder::sSaveOrder::before','onSaveOrder',0);
    }

    public function onCollectLessFiles()
    {
        return new \Shopware\Components\Theme\LessDefinition(
            [],
            [__DIR__ . '/Views/frontend/_public/src/less/all.less']
        );
    }

    public function onCollectJsFiles(Enlight_Event_EventArgs $args)
    {
        $jsFiles = array(__DIR__ . '/Views/frontend/_public/src/js/script.js');
        return new Doctrine\Common\Collections\ArrayCollection($jsFiles);
    }

    public function onPreDispatchCheckout(Enlight_Event_EventArgs $arguments)
    {
        $subject = $arguments->getSubject();
        $request  = $subject->Request();
        $response = $subject->Response();
        $action = $request->getActionName();
        $view = $subject->View();

        $view->addTemplateDir(__DIR__ . '/Views');

        if (!$request->isDispatched() || $response->isException() || !$view->hasTemplate()) {
            return;
        }

        $customerId = Shopware()->Session()->sUserId;
        if ($action !== "finish" || $customerId === null) {
            return;
        }

        $customer = Shopware()->Models()->find('Shopware\Models\Customer\Customer', $customerId);
        if (!$customer) {
            return;
        }

        if($request->getParam('pick-up-department') == ''){
            $subject->forward('confirm', 'checkout', 'frontend', array('pickUpDepartmentSelected' => false));
        }

        if($action == "finish"){
            $view->assign('pickUpDepartment', $request->getParam('pick-up-department'));
        }
    }

    public function onPostDispatchCheckout(Enlight_Event_EventArgs $arguments)
    {
        $subject = $arguments->getSubject();
        $request  = $subject->Request();
        $response = $subject->Response();
        $action = $request->getActionName();
        $view = $subject->View();

        if ( $action !== 'confirm' || !$request->isDispatched() ||
        $response->isException() || !$view->hasTemplate()) {
            return;
        }

        if ($request->has('pick-up-department')) {
            $view->assign('pickUpDepartment', $request->getParam('pick-up-department'));
        }
    }

    public function onSaveOrder(Enlight_Hook_HookArgs $args)
    {
        $order = $args->getSubject();
        $order->o_attr_2 = Shopware()->System()->_POST['pick-up-department'];
    }

}

Vielen Dank im vorraus für jede Hilfe!

Liebe Grüße,

Konsti

Answers

  • gwengwen MemberComments: 17 Received thanks: 2 edited September 12 Member since: September 2018

    Shopware hatte voriges Jahr das gleiche Problem mit seinem Kommentarfeld, wenn über Paypal bezhalt wurde.
    Ich habe bisher nicht herusgefunden, wie es programiert wurde, dass es funktioniert.

    Hast du denn bereits eine Lösung gefunden?
    Ich hänge nämlich an dem gleichen Problem.
     

    Ich nutze aber das Event Shopware_Modules_Order_SendMail_FilterVariables

    und schreibe meinen Wert über 

    $attr_feld = Shopware()->Session()->attribute_field;
    $orderModel->setAttribute6( $attr_feld );
    ....

    in die  s_order_attributes

    Allerdings wird dann immer der letzte Wert, der noch in der Session drin ist, gespeichert, statt dem neuen Wert aus dem Eingabefeld zu speichern.

Sign In or Register to comment.