Получить клиента в Mage_Tax_Model_Calculation :: getRate in magento - PullRequest
1 голос
/ 05 ноября 2010

Я перезаписал Mage_Tax_model_Calculation::getRate, так что я хочу не облагать налогом некоторых клиентов.У меня нет специального класса клиента для них.

У меня есть пользовательское поле в моей модели клиента, которое я хочу проверить после того, как смогу загрузить свою модель клиента и если это поле имеет значение, которое я делаюне облагаю его налогом, в противном случае я вызываю parent::getRate($request)

Возможно ли получить это в функции.

Ответы [ 2 ]

2 голосов
/ 05 ноября 2010

Попробуйте что-то вроде этого:

function getRate($request) {
    // find a customer ID
    $admin_session = Mage::getSingleton('adminhtml/session_quote');
    if($admin_session) {
        if($admin_session->getCustomerId()) {
            $customer_id = $admin_session->getCustomerId();
        }
    } else {
        $customer_id = Mage::getSingleton("customer/session")->getCustomerId();
    }

    // find customer attr
    if($customer_id) {
        $customer = Mage::getModel("customer/customer")->load($customer_id);
        if($customer->getSomeColumnValue()) {
             return 0;
        }
    }

    // fallthrough
    return parent::getRate($request);
}

Надеюсь, это поможет!

Спасибо, Джо


РЕДАКТИРОВАТЬ: хорошая точка;)

Просматривая код adminhtml, он кажется гораздо менее полезным, чем обычный код клиента.Я надеялся на звонок в Mage :: register, но этого не происходит.Я нашел возможное решение, хотя загрузка сеансов в Magento, похоже, имеет побочные эффекты.См. Выше.

РЕДАКТИРОВАТЬ: включить исправления для потомков.

1 голос
/ 05 ноября 2010

Попробуйте загрузить текущего зарегистрированного клиента:

$session = Mage::getSingleton('customer/session');
$customer = Mage::getModel('customer/customer')->load($session->getCustomerId());
$customValue = $customer->getCustomFieldName();

Cheers, JD

...