Diferentes métodos de pago para diferentes tipos de productos.

11

¿Hay alguna manera de tener diferentes métodos de pago disponibles para diferentes tipos de productos?

Este es mi escenario y lo que he descubierto hasta ahora:

Tengo dos tipos de productos en mi sitio de Drupal Commerce, para vender pases de viaje en autobús. Un tipo es solo para reservar el pase de autobús donde selecciona la fecha y la hora (líneas de pedido personalizadas) para sus boletos de autobús. El otro tipo es para pagos reales, donde puede elegir un pase de autobús, agregar recorridos adicionales (con líneas de pedido personalizadas también) y luego pagar con Paypal.

Estoy usando una versión personalizada del módulo de pago de ejemplo, para el tipo de pago de reserva, y estoy usando el módulo Drupal Commerce Paypal para los pagos reales.

Lo que necesito es tener el método de pago de reserva personalizado disponible para un tipo de producto y el método de pago de PayPal para el otro tipo de producto.

He intentado agregar una condición para el tipo de producto y no he podido hacerlo. Podemos agregar una condición para un producto en particular, pero no para un tipo de producto. Esto sería ideal: https://skitch.com/ipwa/eywxa/add-a-new-condition-chasquibus

Lo que he hecho por ahora es clonar la regla de Paypal para cada tipo de producto de pago, y seleccioné esa SKU de productos como condición. Esto no es lo ideal, porque si un usuario tiene más de un producto de pago, obtenemos un método de pago de PayPal duplicado disponible para cada producto de pago adicional en el pedido. Supongo que esto tiene sentido ya que tenemos una regla de método de pago para cada uno.

Mi solución podría tener una condición para el tipo de producto en la regla del método de pago, o ser capaz de tener los cuatro SKU de productos de pago en una condición de 'Pedido contiene un producto en particular'.

ipwa
fuente

Respuestas:

10

El producto typees una propiedad de la commerce_productentidad, por lo que puede usar la condición de "Comparación de datos" incorporada para probarlo.

Simplemente agregue una nueva condición de tipo "Comparación de datos" y haga que el selector de datos se vea así:

Captura de pantalla 1

Cuando continúe, obtendrá una pantalla como esta:

Captura de pantalla 2

Como puede ver, obtiene una buena lista desplegable de tipos de productos para elegir. Acabo de probar eso y funciona de maravilla.

Si eso no funciona por alguna razón, es bastante fácil implementar su propia condición de reglas en un módulo personalizado:

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
fuente
Wow, gracias, este parece ser el camino a seguir por ahora. Aunque la respuesta no responde exactamente la pregunta (es posible que deba presentar un problema para que Commerce proporcione una condición de regla de tipo de producto), sí resuelve mi problema. Dejaré la recompensa abierta para que más personas respondan, pero hasta ahora parece que obtendrás la recompensa. Gracias por las capturas de pantalla por cierto, ayuda mucho.
ipwa
@ipwa Resulta que no fue demasiado complicado, he actualizado la respuesta
Clive
Ojalá no hubieras eliminado tu respuesta anterior y hubieras agregado esta como otra respuesta Cuando intento utilizar commerce-product: type como selector de datos para la condición de comparación de datos, aparece este error: "El selector de datos commerce-product: type para datos de parámetros no es válido".
ipwa
@ipwa ¿A cuál te refieres? ¿El que tiene código o el primero? He devuelto el código en la respuesta en caso de que quisieras decir eso
Clive
Me refería a su respuesta sobre el uso del producto SKUS con OR, que me ayudó mucho a entender OR y cómo usarlo. Actualmente usando eso, probaré el módulo personalizado para implementar mi propia condición. Gracias aprendí mucho sobre las reglas con sus respuestas.
ipwa