Bei FinalizeOrder neuer Artikel hinzufügen

Hallo Community

Ich arbeite zurzeit an einem Modul, welches die vorgezogenen Recycling (vrg) und Entsorgungsgebühren (veg) berechnet und in den Warenkorb legt. Der erste Schritt ist getan und die Gebühren werden im Warenkorb angezeigt und korrekt berechnet.

Die VRG und VEG werden im Warenkorb wie folgt angezeigt:

Summe Artikel (netto) 283.95 CHF
zzgl. MwSt. 8% Betrag 22.72 CHF
Summe Artikel (brutto) 306.67 CHF
Versandkosten (netto) 11.00 CHF
plus MwSt. (anteilig berechnet): 0.88 CHF
[B]Vorgezogene Recycling-Gebühren (VRG) 0.28 CHF
Vorgezogene Entsorgungsgebühren (VEG) 0.55 CHF
zzgl. MwSt. für Gebühren 0.07 CHF[/B]
Gesamtsumme 319.45 CHF

Nun zum eigentlichen Problem:
Der Oxidshop wird über eine Schnittstelle mit einem ERP System verbunden, was auch tadellos funktioniert. Damit die Gebühren im ERP erfasst werden können, gibt es jeweils einen Artikel für die VEG und VRG in den beiden Systemen.

Nun habe ich gesehen, dass beim Bestellprozess ganz am Schluss die Funktion execute() der Klasse order ausgeführt wird. Ich habe ein Modul geschrieben, welches diese Klasse erweitert: (dient nur Testzwecken)


class oxorderext extends order {
    public function execute() {
        $oBasket = $this->getSession()->getBasket();

        //Initialisierung und Laden des VRG Artikels
        $oArticle = oxNew('oxarticle');
        $oArticle->load("37");
        
        // Initialiserung des oxBasketitems für die benötigten Einstellungen von getSelList und getPersParams
        $oBasketItem = oxNew('oxbasketitem');
        $oBasketItem->init($oArticle->getProductId(), 1);
        
        //Setzen des Preises
        $oBasketItem->setPrice(5.0);
        
        //Hinzufügen des oxBasketItems
        try {
            $oSelList = $oBasketItem->getSelList();

            $oBasket->addToBasket($oArticle->getProductId(), 1, $oSelList, $oBasketItem->getPersParams(), true);
        } catch (oxArticleException $oEx) {
            // caught and ignored
            print_r($oBasketItem);
        }
        
        //Fortsetzen des Abschlussprozessess
        return parent::execute();
    }
}

Beim Ausführen der Bestellung erscheint nach dem 4. Punkt nur noch eine weisse Seite und ich habe leider keinen Anhaltspunkt woran dies liegt. Wahrscheinlich kann der erzeugt Artikel nicht dem Warenkorb hinzugefügt werden. Welche Punkte müssen erfüllt sein, damit ein Artikel dem Warenkorb hinzugefügt werden kann?

Grüsse
Noyz

Wenn du eine weiße siehst dann zuerst mal in der config.inc.php die Einstellung iDebug auf -1 setzen und auf dem Server display_errors aktivieren. Dann bekommst du eine Fehlermeldung, die sollte dir helfen.

Hallo Aggrosoft

Besten Dank, dein Tipp hat mir schon mal geholfen ein paar Probleme zu lösen. Hier der neue Quellcode:

class oxorderext extends order {

    public function execute() {
        $oBasket = $this->getSession()->getBasket();

        //Initialisierung und Laden des VRG Artikels
        $oArticle = oxNew('oxarticle');
        $oArticle->load("37");

        // Initialiserung des oxBasketitems für die benötigten Einstellungen von getSelList und getPersParams
        $oBasketItem = oxNew('oxbasketitem');
        $oBasketItem->init($oArticle->getProductId(), 1);

        //Erstellen des Preisobjekts
        $oPrice = oxNew('oxprice');
//        $oPrice = new oxPrice();
        $oPrice->setPrice(5.0);


        //Setzen des Preises
        $oBasketItem->setPrice($oPrice);

        //Hinzufügen des oxBasketItems
        try {
            $oSelList = $oBasketItem->getSelList();

            $oBasket->addToBasket($oArticle->getProductId(), 1, $oSelList, $oBasketItem->getPersParams(), false);
        } catch (oxArticleException $oEx) {
            // caught and ignored
            print_r($oBasketItem);
        }

        //Fortsetzen des Abschlussprozessess
        return parent::execute();
    }

}

Nun stehe ich an einem neuen Problem an:

Fatal error: Call to a member function getNettoPrice() on a non-object in /usr/www/users/mikatj/application/models/oxorder.php on line 907

Bei dieser Zeile handelt es sich um _setOrderArticles() und es wird der Nettopreis abgerufen:

$oOrderArticle->oxorderarticles__oxnetprice  = new oxField( $oPrice->getNettoPrice(), oxField::T_RAW );

Der Preis wird ja durch das neue oxPrice-Objekt gesetzt und sollte eigentlich vorhanden sein. Hast du hier nochmals einen Tipp für mich?

Besten Dank und grüsse
Noyz