Ограничить типы платежей Ролью администратора или группой клиентов или, скорее, магазином?


Я пытаюсь создать систему salesrep для магазина покупателей. Эти поставщики услуг по продажам имеют ограниченный внутренний доступ и могут создавать и редактировать клиентов и создавать заказы для своих клиентов, а также просматривать заказы своих клиентов.

Теперь у меня есть следующая проблема:

Поставщикам услуг продаж должны быть разрешены другие типы платежей, чем обычным пользователям магазина, но, судя по разрешениям ролей, я не могу разрешить это ни для одной роли, ни для каждой группы клиентов (samesrep создает заказ от имени клиентов).

Поэтому мне было интересно, как лучше всего это сделать? Расширить модули типов платежей, разрешенные в представлении магазина, и использовать 2-й магазин для продаж и разрешить/запретить определенные модули платежей для каждого представления магазина или написать модуль, который проверяет роли или группы клиентов перед отображением типов платежей?

/редактировать: Или, может быть, использовать правила покупок, но я не уверен, что они работают при создании заказов из серверной части?

Любая помощь - это оцененный.

Author: tecjam, 2015-02-06

2 answers

Текджам,

Привет, думаю, что ваша проблема была решена наблюдателем событий Magento.

Для изучения:

  1. маджентокоммерц
  2. тутсплюс

Уволить наблюдателя при событии payment_method_is_active.

Основной из Admin Role or Customer group or store, вы можете запретить show Payment at checkout.

Модуль config.xml код:

<global>
    <events>
    <payment_method_is_active>
        <observers>
            <paymentfilter_payment_method_is_active>
            <type>singleton</type>
            <class>zerosubtotalpaymentmethod/observer</class>
            <method>filterpaymentmethod</method>
            </paymentfilter_payment_method_is_active>
        </observers>
    </payment_method_is_active>
    </events>
</global>

Код наблюдателя

<?php
class Bh_ZeroSubtotalpaymentmethod_Model_Observer {

    public function filterpaymentmethod(Varien_Event_Observer $observer) {

        if (Mage::app()->getStore()->isAdmin()) {

         //currentstore is  Admin
            /* Current Admin User */
            $admin_user_session = Mage::getSingleton('admin/session');
            $adminuserId = $admin_user_session->getUser()->getUserId();
             if ($adminuserId):  //check if the admin is logged in
                /*
                $role_data = Mage::getModel('admin/user')->load($adminuserId)->getRole()->getData();
            $role_name = $role_data['role_name'];
                */
             endif

        }else{
        // 
        }



        /* call get payment method */
        $method = $observer->getEvent()->getMethodInstance();

        if($method->getCode()=='paypal_standard')
        {   $quote = $observer->getEvent()->getQuote();
            if(Mage::app()->getStore()->roundPrice($quote->getGrandTotal())<=0){
            $result = $observer->getEvent()->getResult();   
            $result->isAvailable = false;
            }
            return;
        }
        if($method->getCode()=='free'){
            $quote = $observer->getEvent()->getQuote();
            if(Mage::app()->getStore()->roundPrice($quote->getGrandTotal())>0){
            $result = $observer->getEvent()->getResult();   
            $result->isAvailable = false;
            return;
            }
        }
        return;
    }
}
?>
 1
Author: Amit Bera, 2015-02-06 16:08:04

Взгляните на это расширение. Это позволяет вам настроить способы оплаты, которые будут использоваться только в бэкэнде http://www.magentocommerce.com/magento-connect/admin-payments.html

Код доступен на github (https://github.com/getsquare/Magento-Admin-Payments)

Событие, которое вы хотели бы наблюдать, является payment_method_is_active.

<adminhtml>
    <events>
        <payment_method_is_active>
            <observers>
                ...
            </observers>
        </payment_method_is_active>
    </events>
</adminhtml>

В тебе наблюдатель

$event = $observer->getEvent();
$paymentMethod = $event->getMethodInstance();

$result = $observer->getResult();
$result->isAvailable = true;

Вы можете выполнять проверки с кодом способа оплаты и т.Д $paymentMethod->getCode()

$result->isAvailable = true; позволит использовать способ оплаты

 1
Author: wrb, 2015-02-15 14:54:57