Zahlart für bestimmte Artikel ausschließen

So ich fand das Thema einfach mal spannend daher habe ich mich mal rangemacht und eine Lösung erstellt als Modul:

dieses hier wäre halt das Modul htr_payment
also in System->Module :
payment => htr_payment

oder wie auch immer ihr folgende Datei ablegt innerhalb modules

fehlt noch backend und dergleichen, aber es geht schon mal folgendermaßen:

habe testhalber Rechnung (= oxidinvoice) genommen.
Und eine versteckte Kategorie noinvoice angelegt.
definiert als :

protected $_aCatDiasallowPayment = array (‘noinvoice’=>‘oxidinvoice’);

führt dazu dass Produkte, welche in der (versteckten) Kategorie noinvoice liegen,
wenn eines davon im Warenkorb liegt, die Zahlart oxidinvoice , also Rechnung ausblenden bei payment …
das definierende Array kann beliebige erweitert werden, und kann natürlich auch dann mal später im backend behandelt werden …

<?php
/**
 * 
 * disable payment for articles assigned to specific category
 */
class htr_payment extends htr_payment_parent
{
    protected $_aCatDiasallowPayment = array ('noinvoice'=>'oxidinvoice');


    public function getPaymentList()
    {

        if (is_null($this->_oPaymentList)) {
            $oBasket = $this->getSession()->getBasket();
            $oPaymentList = parent::getPaymentList();
            $oCategory = new oxCategory();
            foreach($oBasket->getBasketArticles() as $key=>$oArticle){
                $aCatIds = $oArticle->getCategoryIds();
                foreach ($aCatIds as $sId){
                    $oCategory->load($sId);
                    $title = $oCategory->getTitle();
                    if (array_key_exists($title, $this->_aCatDiasallowPayment)){
                        //disallow
                        foreach ($oPaymentList as $key=>$oPayment){
                            $sOxid = $oPayment->_sOXID;
                            if ($sOxid == $this->_aCatDiasallowPayment[$title]){
                                unset ($this->_oPaymentList[$this->_aCatDiasallowPayment[$title]]);
                            }
                        }
                        //disallow
                    }
                }
            }

            #$this->_oPaymentList=$oPaymentList;
        }
        return $this->_oPaymentList;
    }
}

habe es auch mal auf englisch ins wiki getan

Supi!

Habs mal an die richtige Stelle verschoben: http://wiki.oxidforge.org/Tutorials/en/Disable_Payment_Method

Oh Super! Hat das schon wer getestet?
Werde mich direkt daran machen.

So, habe das mal genauso eingebaut und zu testen. Leider bekomme ich folgenden Fehler im Bestellabschluss, beim aufrufen vom payment:

Function 'getTitle' does not exist or is not accessible! (oxCategory) 

Oxdi CE 4.4.8

Ich habe nun die Funktion mal unter /core/oxcategory.php hinzugefügt, jetzt klappt es in 4.4.8 ohne Probleme.


 /**
     * Returns category title
     *
     * @return string
     */
    public function getTitle()
    {
        return $this->oxcategories__oxtitle->value;
    }

Ah OK, gut, mit 4.5.3 hatte ich das getestet, aber nicht mit 4.4, artet ja schnell aus.
Bezüglich Updatefähigkeit sollte man jedoch statt direkt in core/oxcategory.php zu patchen,
lieber das im Modul machen.

Also für <4.5:


$title = $oCategory->getTitle();

ändern in 

$title = $oCategory->oxcategories__oxtitle->getRawValue();

das geht nebenbei auch in 4.5x, aber wo es da ja eine Funktion gibt, die besser nehmen ?
Naja letztlich macht die auch nichts anderes …

Habe ich dann auch mal im wiki verbessert, also mit <4.5 kompatibel gemacht :

http://wiki.oxidforge.org/Tutorials/…Payment_Method

Jep, läuft. Danke!

Hi,

haben das gleiche Problem mit unseren Shop.

Gibt es eine Anleitung für das Backend?

Gruss

Hi!

Genau das suche ich… Super, vielen Dank!!

Ich sollte allerdings für eine Kategorie mehrere Zahlungsmethoden ausschließen können…
Kann mir da einer von euch bitte helfen? :wink:

Danke & Gruß

Wolf

[QUOTE=wolfstgt;75476]Hi!

Genau das suche ich… Super, vielen Dank!!

Ich sollte allerdings für eine Kategorie mehrere Zahlungsmethoden ausschließen können…
Kann mir da einer von euch bitte helfen? :wink:

Danke & Gruß

Wolf[/QUOTE]

Eigentlich müsste eine Anpassung von

protected $_aCatDiasallowPayment = array (‘alkohol’ => ‘oxidpaypal’, “d3sofortueberweisung”);

reichen… So, wie es jetzt dasteht zeigt der Checkout PayPal nicht an, aber SÜ schon …

…wahrscheinlich ist das wieder eine der “ich-greif’-mir-an-die-Stirn”-Fragen… :o

Ich habe quasi das gleiche Problem, nur würde ich gern alle Versandarten bis auf eine ausschließen.

Heisst: Es gibt ein paar Artikel, die nur als Paket versendet werden da ziemlich groß. Lege ich einen kleinen Artikel dazu, geht es plötzlich auch als Brief. Sämtliche Sortierreihenfolgen und keine weitere Regel berücksichtigen und so weiter sollten richtig gesetzt sein. Kann ich das ähnlich ausschließen?

Beste Grüße!

Das Problem mit mehreren Zahlarten kann so gelöst werden:
protected $_aCatDiasallowPayment = array (‘nopaypal’ => ‘oxidpaypal’, ‘nosofortueberweisung’ => ‘d3sofortueberweisung’);

Dafür müssen aber auch die Kategorien nopaypal und nosofortueberweisung angelegt werden.

Hi,

erstmal danke für das Modul!
Klingt sehr vielversprechend und bietet eine Lösung für genau unser Problem!
Ich bin der Anleitung gefolgt, wir sind auf Version 4.4.8. (Update klappt leider nicht)!

Aber wenn ich nun eine Bestellung ausführe, dann gelange ich bei Punkt 3 des Vorgangs (Versand- und Zahlungsart) wieder auf die Homepage des Shops und kann die Bestellung nicht abschließen.

Ich habe lediglich die PHP Datei in den Ordner “Module” kopiert, das Modul im backend aktiviert, eine versteckte Kategorie hinzugefügt und dieser Kategorie das entsprechende Produkt hinzugefügt.

Der Fehler tritt übrigens bei allen Produkten auf!

Entferne ich die PHP Datei wieder und lösche das Modul, ist alles beim Alten.

Danke für eure Ideen!

das hier hattest Du versucht?

http://www.oxid-esales.com/forum/showthread.php?t=3928&page=3#post71313

[QUOTE=Hebsacker;80259]das hier hattest Du versucht?

http://www.oxid-esales.com/forum/showthread.php?t=3928&page=3#post71313[/QUOTE]

Ich dachte, dass sei hinfällig, weil die Zeile von ‘holgt’ doch schon in seinem Modul geändert wurde?
Falls nicht, kannst du mir sagen, an welcher Stelle in der /core/oxcategory.php die Funktion eingebaut werden muss?

Danke!

ehm - richtig, jedenfalls in der Version im Wiki -> http://wiki.oxidforge.org/Tutorials/en/Disable_Payment_Method

Hast Du auch Deine versteckte Kategorie und die ausgeschlossene Zahlart im Modul eingetragen? Rot ist die Kategorie, Blau die Zahlart:

protected $_aCatDiasallowPayment = array (‘noinvoice’=>‘oxidinvoice’);

[QUOTE=Hebsacker;80264]ehm - richtig, jedenfalls in der Version im Wiki -> http://wiki.oxidforge.org/Tutorials/en/Disable_Payment_Method

Hast Du auch Deine versteckte Kategorie und die ausgeschlossene Zahlart im Modul eingetragen? Rot ist die Kategorie, Blau die Zahlart:

protected $_aCatDiasallowPayment = array (‘noinvoice’=>‘oxidinvoice’);[/QUOTE]

Also die die Kategorie habe ich sowieso ‘noinvoice’ genannt.
Für ‘oxidinvoice’ habe ich die Zahlart “Rechnung” eingetragen.

Doch bei Step 3 lande ich wieder auf der Homepage und es kommt:
EXCEPTION_SYSTEMCOMPONENT_CLASSNOTFOUND

Ist diese Funktionalität “Zahlart für bestimmte Artikel ausschließen” eigentlich schon in die Wishlist von Oxid aufgenommen? (Finde gerade nicht den Link zu dieser Abstimmungsseite, ist offenbar ziemlich versteckt …)