Как получить идентификатор клиента на странице создания заказа
-
13-12-2019 - |
Вопрос
ОКОНЧАТЕЛЬНОЕ РЕДАКТИРОВАНИЕ (решено)
Большое спасибо Мариусу за ответ на этот вопрос.С его помощью и некоторой информацией из этот вопрос, мне удалось собрать рабочее решение.Вот последний (рабочий) блок кода:
public function calcTaxAmount($price, $taxRate, $priceIncludeTax = false, $round = true)
{
$cust = $this->getCustomer();
$custId = $cust->getId();
$vat = $cust->getData('taxvat');
$custAddress = Mage::getModel('customer/address')->load($cust->default_shipping);
$custState = $custAddress->getData('region');
$customerLoggedIn = Mage::getSingleton('checkout/session')->getQuote()->getShippingAddress()->getRegion();
$taxRate = $taxRate / 100;
if ($priceIncludeTax) {
$amount = $price * (1 - 1 / (1 + $taxRate));
} else if (strtoupper($custState) === 'FLORIDA' || strtoupper($customerLoggedIn) === 'FLORIDA') {
if ($vat) {
$amount = $price;
} else {
$amount = $price * $taxRate;
}
} else {
$amount = 0;
}
if ($round) {
return $this->round($amount);
}
return $amount;
}
Оригинальный вопрос
Как видно в этот вопрос (самостоятельный ответ), Я пытаюсь закодировать особое условие в настройках налога.
Это отлично работает на интерфейсе, и это был ранее работал над серверной частью.Я не менял код, поэтому не понимаю, почему он сейчас не работает.
Как загрузить идентификатор клиента на странице создания нового заказа?
Метод, который я успешно использовал, больше не работает с моим журналом ошибок, в котором говорится:
Undefined variable: customerId in /app/code/local/Mage/Tax/Model/Calculation.php on line 658
Строка 658:
$cust = Mage::getModel('customer/customer')->load($customerId);
Это в рамках Tax/Model/Calculation.php
файл, поэтому он ссылается на этот блок кода:
public function getCustomer()
{
if ($this->_customer === null) {
$session = Mage::getSingleton('customer/session');
if ($session->isLoggedIn()) {
$this->_customer = $session->getCustomer();
} elseif ($session->getCustomerId()) {
$this->_customer = Mage::getModel('customer/customer')->load($session->getCustomerId());
} else {
$this->_customer = false;
}
}
return $this->_customer;
}
Метод, который я изменяю, calcTaxAmount
:
public function calcTaxAmount($price, $taxRate, $priceIncludeTax = false, $round = true)
{
$cust = Mage::getModel('customer/customer')->load($customerId);
$vat = $cust->getData('taxvat');
$customerLoggedIn = Mage::getSingleton('checkout/session')->getQuote()->getShippingAddress()->getRegion();
$taxRate = $taxRate / 100;
if ($priceIncludeTax) {
$amount = $price * (1 - 1 / (1 + $taxRate));
} else if (strtoupper($customerLoggedIn) === 'FLORIDA') {
if ($vat) {
$amount = $price;
} else {
$amount = $price * $taxRate;
}
} else {
$amount = 0;
}
if ($round) {
return $this->round($amount);
}
return $amount;
}
Решение
Вместо
$cust = Mage::getModel('customer/customer')->load($customerId);
Попробуйте использовать это:
$cust = $this->getCustomer();
но будь осторожен. $cust
может быть null
в некоторых случаях.
С другой стороны, это выглядит не очень хорошо:
$custAdmin = Mage::getSingleton('customer/session')->getCustomer();
$custAdminId = $custAdmin->getId();
$region = Mage::getModel('directory/region')->load($custAdminId);
$stateCode = $region->getCode();
$stateName = $region->getName();
вы в основном получаете идентификатор клиента из сеанса, а затем загружаете регион с тем же идентификатором, что и клиент.
Я уверен, что это не то, что вы хотите сделать.