Różne metody płatności dla różnych rodzajów produktów

11

Czy istnieje sposób udostępnienia różnych metod płatności dla różnych rodzajów produktów?

Oto mój scenariusz i to, co do tej pory wymyśliłem:

Mam dwa rodzaje produktów na mojej stronie Drupal Commerce, do sprzedaży biletów na przejazdy autobusem. Jednym z nich jest zarezerwowanie biletu autobusowego, w którym wybierasz datę i godzinę (niestandardowe pozycje) dla biletów biznesowych. Drugi typ dotyczy faktycznych płatności, w których możesz wybrać kartę biznesową, dodać dodatkowe wycieczki (z niestandardowymi elementami zamówienia), a następnie zapłacić Paypal.

Korzystam ze spersonalizowanej wersji przykładowego modułu płatności dla typu płatności za rezerwację i używam modułu Drupal Commerce Paypal do faktycznych płatności.

Potrzebuję mieć niestandardową metodę płatności za rezerwację dla jednego rodzaju produktu, a metodę płatności PayPal dla drugiego rodzaju produktu.

Próbowałem dodać warunek dla typu produktu i nie byłem w stanie tego zrobić. Możemy dodać warunek dla konkretnego produktu, ale nie dla typu produktu. Byłoby to idealne: https://skitch.com/ipwa/eywxa/add-a-new-condition-chasquibus

To, co zrobiłem teraz, to sklonowanie reguły Paypal dla każdego rodzaju produktu płatniczego i wybranie tego SKU produktów jako warunek. Nie jest to idealne, ponieważ jeśli użytkownik ma więcej niż jeden produkt płatniczy, otrzymujemy duplikat metody płatności Paypal dostępnej dla każdego dodatkowego produktu płatniczego w zamówieniu. Wydaje mi się, że ma to sens, ponieważ dla każdego mamy regułę metody płatności.

Moje rozwiązanie może mieć warunek typu produktu zgodnie z regułą metody płatności lub mieć cztery kody SKU produktów płatniczych w warunku „Zamówienie zawiera konkretny produkt”.

ipwa
źródło

Odpowiedzi:

10

Produkt typejest własnością commerce_productencji, więc możesz użyć wbudowanego warunku „Porównanie danych”, aby go przetestować.

Wystarczy dodać nowy warunek typu „Porównanie danych” i ustawić selektor danych tak:

Zrzut ekranu 1

Po kontynuowaniu pojawi się taki ekran:

Zrzut ekranu 2

Jak widać, masz ładną listę rozwijaną rodzajów produktów do wyboru. Właśnie to przetestowałem i działa to na ucztę.

Jeśli to nie działa z jakiegokolwiek powodu, dość łatwo jest zaimplementować własny warunek reguł w module niestandardowym:

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
źródło
Wow, dzięki, wydaje się, że teraz jest to właściwy sposób. Chociaż odpowiedź nie odpowiada dokładnie na pytanie (być może będę musiał zgłosić problem, aby Commerce podał warunek reguły typu produktu), to rozwiązuje mój problem. Zostawię nagrodę otwartą, aby pozwolić większej liczbie osób odpowiedzieć, ale wydaje się, że do tej pory dostaniesz nagrodę. Dzięki za zrzuty ekranu btw, bardzo pomaga.
ipwa
@ipwa Okazuje się, że to nie było zbyt trudne, zaktualizowałem odpowiedź
Clive
Żałuję, że nie usunąłeś poprzedniej odpowiedzi i dodałeś ją jako inną odpowiedź. Gdy próbuję użyć produktu handlowego: wpisz jako selektora danych dla warunku porównania danych, pojawia się błąd: „Selektor danych produktu handlowego: typ danych parametrów jest nieprawidłowy”.
ipwa
@ipwa Który masz na myśli? Ten z kodem czy pierwszy? Włożyłem kod z powrotem do odpowiedzi na wypadek, gdybyś miał na myśli jeden
Clive
Miałem na myśli twoją odpowiedź na temat używania produktu SKUS z OR, która pomogła mi bardzo dobrze zrozumieć OR i jak z niego korzystać. Obecnie go używam, wypróbuje moduł niestandardowy, aby zaimplementować własny warunek. Dzięki wiele dowiedziałem się o regułach z odpowiedziami.
ipwa