Diferentes métodos de pagamento para diferentes tipos de produtos

11

Existe uma maneira de ter diferentes métodos de pagamento disponíveis para diferentes tipos de produtos?

Este é o meu cenário e o que descobri até agora:

Tenho dois tipos de produtos no site do Drupal Commerce, para vender passes de viagens de ônibus. Um tipo é apenas para reservar o passe de ônibus, onde você seleciona a data e a hora (itens de linha personalizados) para seus bilhetes de ônibus. O outro tipo é para pagamentos reais, onde você pode escolher um passe de ônibus, adicionar passeios adicionais (com itens de linha personalizados também) e pagar com Paypal.

Estou usando uma versão personalizada do módulo de pagamento de exemplo, para o tipo de pagamento de reserva, e usando o módulo Paypal do Drupal Commerce para os pagamentos reais.

O que eu preciso é ter o método de pagamento personalizado da reserva disponível para um tipo de produto e o método de pagamento paypal para o outro tipo de produto.

Tentei adicionar uma condição para o tipo de produto e não consegui fazer isso. Podemos adicionar uma condição para um produto específico, mas não para um tipo de produto. Isso seria ideal: https://skitch.com/ipwa/eywxa/add-a-new-condition-chasquibus

O que fiz por enquanto é clonar a regra do Paypal para cada tipo de produto de pagamento e selecionar o SKU desse produto como uma condição. Isso não é ideal, porque se um usuário tiver mais de um produto de pagamento, obteremos um método de pagamento Paypal duplicado disponível para cada produto de pagamento adicional no pedido. Acho que isso faz sentido, pois temos uma regra de método de pagamento para cada uma.

Minha solução poderia ter uma condição para o tipo de produto na regra da forma de pagamento ou ter os quatro SKUs de produtos de pagamento em uma condição 'O pedido contém um produto específico'.

ipwa
fonte

Respostas:

10

O produto typeé uma propriedade da commerce_productentidade, portanto você pode usar a condição interna "Comparação de dados" para testá-lo.

Basta adicionar uma nova condição do tipo "Comparação de dados" e fazer com que o seletor de dados fique assim:

Captura de tela 1

Quando você continuar, você verá uma tela como esta:

Captura de tela 2

Como você pode ver, obtenha uma boa lista suspensa de tipos de produtos para escolher. Acabei de testar isso e funciona.

Se isso não funcionar por qualquer motivo, é muito fácil implementar sua própria condição de regras em um 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
fonte
Uau, obrigado, este parece o caminho a percorrer por enquanto. Embora a resposta não responda exatamente à pergunta (talvez seja necessário registrar um problema no Commerce para fornecer uma condição de regra de tipo de produto), ela resolve o meu problema. Deixarei a recompensa em aberto para permitir que mais pessoas respondam, mas parece que você receberá a recompensa. Obrigado pelas imagens btw, ajuda muito.
Ipwa
@ipwa Parece que não foi muito complicado, atualizei a resposta
Clive
Desejo que você não tenha excluído sua resposta anterior e adicionado esta como outra resposta. Quando tento usar o trade-product: type como um seletor de dados para a condição de comparação de dados, recebo este erro: "O seletor de dados commerce-product: o tipo de dados de parâmetro é inválido."
Ipwa
@ipwa Qual deles você quer dizer? Aquele com código ou o primeiro? Coloquei o código de volta na resposta, caso você quisesse dizer isso.
Clive
Eu quis dizer sua resposta sobre o uso do produto SKUS com OR, que me ajudou a entender muito bem o OR e como usá-lo. Atualmente usando isso, tentarei o módulo personalizado para implementar minha própria condição. Obrigado, aprendemos muito sobre regras com suas respostas.
Ipwa