Unterschiedliche Zahlungsmethoden für unterschiedliche Produkttypen

11

Gibt es eine Möglichkeit, verschiedene Zahlungsmethoden für verschiedene Produkttypen zur Verfügung zu haben?

Dies ist mein Szenario und was ich bisher herausgefunden habe:

Auf meiner Drupal Commerce-Website befinden sich zwei Produkttypen für den Verkauf von Busfahrkarten. Eine Möglichkeit besteht darin, nur den Buspass zu buchen, in dem Sie Datum und Uhrzeit (benutzerdefinierte Werbebuchungen) für Ihre Bustickets auswählen. Die andere Art ist für tatsächliche Zahlungen, bei denen Sie einen Buspass auswählen, zusätzliche Touren (auch mit benutzerdefinierten Werbebuchungen) hinzufügen und dann mit Paypal bezahlen können.

Ich verwende eine angepasste Version des Beispielzahlungsmoduls für die Buchungszahlungsart und das Drupal Commerce Paypal-Modul für die tatsächlichen Zahlungen.

Ich benötige die benutzerdefinierte Buchungszahlungsmethode für einen Produkttyp und die Paypal-Zahlungsmethode für den anderen Produkttyp.

Ich habe versucht, eine Bedingung für den Produkttyp hinzuzufügen, konnte dies jedoch nicht. Wir können eine Bedingung für ein bestimmtes Produkt hinzufügen, jedoch nicht für einen Produkttyp. Dies wäre ideal: https://skitch.com/ipwa/eywxa/add-a-new-condition-chasquibus

Was ich jetzt getan habe, ist, die Paypal-Regel für jeden Zahlungsprodukttyp zu klonen und diese Produkt-SKU als Bedingung auszuwählen. Dies ist nicht ideal, da bei einem Benutzer mit mehr als einem Zahlungsprodukt für jedes weitere Zahlungsprodukt in der Bestellung eine doppelte Paypal-Zahlungsmethode verfügbar ist. Ich denke, das ist sinnvoll, da wir für jede eine Zahlungsmethodenregel haben.

Meine Lösung könnte eine Bedingung für den Produkttyp in der Zahlungsmethodenregel haben oder die vier Zahlungsprodukt-SKUs in einer Bedingung "Bestellung enthält ein bestimmtes Produkt".

ipwa
quelle

Antworten:

10

Das Produkt typeist eine Eigenschaft der commerce_productEntität, sodass Sie die integrierte Bedingung "Datenvergleich" zum Testen verwenden können.

Fügen Sie einfach eine neue Bedingung vom Typ "Datenvergleich" hinzu und lassen Sie die Datenauswahl folgendermaßen aussehen:

Screenshot 1

Wenn Sie fortfahren, wird ein Bildschirm wie folgt angezeigt:

Screenshot 2

Wie Sie sehen können, erhalten Sie eine schöne Dropdown-Liste mit Produkttypen zur Auswahl. Ich habe das gerade getestet und es funktioniert ein Vergnügen.

Wenn dies aus irgendeinem Grund nicht funktioniert, ist es ziemlich einfach, Ihre eigene Regelbedingung in einem benutzerdefinierten Modul zu implementieren:

function MYMODULE_rules_condition_info() {
  return array(
    'commerce_product_is_type' => array(
      'label' => t('Product is a certain type'), 
      'parameter' => array(
        'product' => array(
          'label' => t('Product'),
          'type' => 'commerce_product',
        ),
        'type' => array(
          'label' => t('Product Type (Machine Name)'),
          'type' => 'text'
        )
      ), 
      'group' => t('Commerce Product'),
      'callbacks' => array(
        'execute' => 'MYMODULE_commerce_product_is_type',
      )
    ),
  );
}


function MYMODULE_commerce_product_is_type($product, $type) {
  return $product->type == $type;
}
Clive
quelle
Wow, danke, das scheint der richtige Weg zu sein. Obwohl die Antwort die Frage nicht genau beantwortet (ich muss möglicherweise ein Problem für Commerce einreichen, um eine Regelbedingung für den Produkttyp bereitzustellen), löst sie mein Problem. Ich werde das Kopfgeld offen lassen, damit mehr Leute antworten können, aber es scheint so weit, als würden Sie das Kopfgeld erhalten. Danke übrigens für die Screenshots, hilft sehr.
Ipwa
@ipwa Es stellte sich heraus, dass es nicht zu schwierig war, ich habe die Antwort aktualisiert
Clive
Ich wünschte, Sie hätten Ihre vorherige Antwort nicht gelöscht und diese stattdessen als weitere Antwort hinzugefügt. Wenn ich versuche, Commerce-Produkt: Typ als Datenauswahl für die Datenvergleichsbedingung zu verwenden, wird folgende Fehlermeldung angezeigt: "Datenauswahl Handelsprodukt: Typ für Parameterdaten ist ungültig."
Ipwa
@ipwa Welches meinst du? Der mit dem Code oder der allererste? Ich habe den Code wieder in die Antwort
Clive
Ich meinte Ihre Antwort über die Verwendung des Produkts SKUS mit OP, die mir sehr geholfen hat, OP zu verstehen und wie man es verwendet. Wenn Sie dies derzeit verwenden, probieren Sie das benutzerdefinierte Modul aus, um meine eigene Bedingung zu implementieren. Vielen Dank, dass Sie mit Ihren Antworten viel über Regeln gelernt haben.
Ipwa