Différentes méthodes de paiement pour différents types de produits

11

Existe-t-il un moyen d'avoir différents modes de paiement disponibles pour différents types de produits?

Voici mon scénario et ce que j'ai compris jusqu'à présent:

J'ai deux types de produits sur mon site Drupal Commerce, pour vendre des laissez-passer de bus. Un type consiste simplement à réserver le pass de bus où vous sélectionnez la date et les heures (éléments de ligne personnalisés) pour vos billets de bus. L'autre type concerne les paiements réels, où vous pouvez choisir un pass bus, ajouter des visites supplémentaires (avec des éléments de ligne personnalisés également), puis payer avec Paypal.

J'utilise une version personnalisée de l'exemple de module de paiement, pour le type de paiement de réservation, et j'utilise le module Drupal Commerce Paypal pour les paiements réels.

Ce dont j'ai besoin, c'est d'avoir le mode de paiement de réservation personnalisé disponible pour un type de produit et le mode de paiement paypal pour l'autre type de produit.

J'ai essayé d'ajouter une condition pour le type de produit et je n'ai pas pu le faire. Nous pouvons ajouter une condition pour un produit particulier, mais pas pour un type de produit. Ce serait idéal: https://skitch.com/ipwa/eywxa/add-a-new-condition-chasquibus

Ce que j'ai fait pour l'instant, c'est de cloner la règle Paypal pour chaque type de produit de paiement, et de sélectionner cette référence de produit comme condition. Ce n'est pas idéal, car si un utilisateur a plus d'un produit de paiement, nous obtenons un mode de paiement Paypal en double disponible pour chaque produit de paiement supplémentaire sur la commande. Je suppose que cela a du sens puisque nous avons une règle de méthode de paiement pour chacun.

Ma solution pourrait avoir une condition pour le type de produit sur la règle de mode de paiement, ou être en mesure d'avoir les quatre références de produits de paiement dans une condition «La commande contient un produit particulier».

ipwa
la source

Réponses:

10

Le produit typeest une propriété de l' commerce_productentité, vous pouvez donc utiliser la condition "Comparaison de données" intégrée pour le tester.

Ajoutez simplement une nouvelle condition de type "Comparaison de données" et faites ressembler le sélecteur de données à ceci:

Capture d'écran 1

Lorsque vous continuez, vous obtiendrez un écran comme celui-ci:

Capture d'écran 2

Comme vous pouvez le voir, vous obtenez une belle liste déroulante de types de produits parmi lesquels choisir. Je viens de tester ça et ça marche un régal.

Si cela ne fonctionne pas pour une raison quelconque, il est assez facile d'implémenter votre propre condition de règles dans un module personnalisé:

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
la source
Wow, merci, cela semble être la voie à suivre pour l'instant. Bien que la réponse ne réponde pas exactement à la question (je devrai peut-être déposer un problème pour que le Commerce fournisse une condition de règle de type de produit), cela résout mon problème. Je vais laisser la prime ouverte pour permettre à plus de gens de répondre, mais il semble pour l'instant que vous obtiendrez la prime. Merci pour les captures d'écran btw, aide beaucoup.
ipwa
@ipwa Il s'avère que ce n'était pas trop compliqué, j'ai mis à jour la réponse
Clive
Je souhaite que vous n'ayez pas supprimé votre réponse précédente et ajouté celle-ci comme autre réponse à la place. Lorsque j'essaie d'utiliser commerce-product: type comme sélecteur de données pour la condition de comparaison de données, j'obtiens cette erreur: "Sélecteur de données commerce-product: le type pour les données de paramètre n'est pas valide."
ipwa
@ipwa Lequel voulez-vous dire? Celui avec le code ou le tout premier? J'ai remis le code dans la réponse au cas où vous vouliez dire celui-là
Clive
Je voulais dire votre réponse sur l'utilisation du produit SKUS avec OR, qui m'a beaucoup aidé à comprendre OR et comment l'utiliser. Utilisant actuellement cela, va essayer le module personnalisé pour implémenter ma propre condition. Merci d'avoir beaucoup appris sur les règles avec vos réponses.
ipwa