Como obter o ID de Cliente em Criar uma página de Encomenda
-
13-12-2019 - |
Pergunta
EDIÇÃO FINAL (resolvido)
Um grande obrigado para Marius para responder a esta pergunta.Com a sua ajuda, e algumas informações de esta pergunta, Eu era capaz de reunir uma solução de trabalho.Aqui é o final (de trabalho), bloco de código:
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;
}
Pergunta Original
Como visto na a esta questão (auto-respondidas), Eu estou tentando código de uma condição personalizada em minha declaração de Imposto de instalação.
Isso está funcionando perfeitamente no frontend e foi trabalhando no backend anterior.Eu não tiver alterado o código, então eu sou sim a uma perda para o qual ele não está funcionando agora.
Como faço para carregar o ID de Cliente quando estou em Criar Nova página de Encomenda?
O método que eu estava usando com êxito não é mais a trabalhar com a minha log de erro dizendo:
Undefined variable: customerId in /app/code/local/Mage/Tax/Model/Calculation.php on line 658
Linha 658:
$cust = Mage::getModel('customer/customer')->load($customerId);
Isto é, dentro da Tax/Model/Calculation.php
o arquivo, portanto, faz referência a este bloco de código:
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;
}
O método que eu estou a modificar 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;
}
Solução
Em vez de
$cust = Mage::getModel('customer/customer')->load($customerId);
Tente usar esse:
$cust = $this->getCustomer();
mas tenha cuidado. $cust
pode ser null
em alguns casos.
Em uma nota de lado, isso não parece bom:
$custAdmin = Mage::getSingleton('customer/session')->getCustomer();
$custAdminId = $custAdmin->getId();
$region = Mage::getModel('directory/region')->load($custAdminId);
$stateCode = $region->getCode();
$stateName = $region->getName();
basicamente, você está recebendo o id de cliente da sessão, em seguida, carregar a região com o mesmo id de cliente.
Eu tenho certeza que isso não é o que você quer fazer.