Comment récupérer l'ID client sur la page Créer une commande
-
13-12-2019 - |
Question
EDITION FINALE (résolu)
Un grand merci à Marius d'avoir répondu à cette question.Avec son aide et quelques informations de cette question, j'ai pu élaborer une solution efficace.Voici le bloc de code final (de travail) :
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;
}
Question originale
Comme on le voit dans cette question (auto-réponse), j'essaie de coder une condition personnalisée dans ma configuration fiscale.
Cela fonctionne parfaitement sur le frontend et était travailler sur le backend plus tôt.Je n'ai pas modifié le code, donc je ne comprends pas pourquoi il ne fonctionne pas maintenant.
Comment puis-je charger l'ID client lorsque je suis sur la page Créer une nouvelle commande ?
La méthode que j'utilisais avec succès ne fonctionne plus avec mon journal d'erreurs indiquant :
Undefined variable: customerId in /app/code/local/Mage/Tax/Model/Calculation.php on line 658
Ligne 658 :
$cust = Mage::getModel('customer/customer')->load($customerId);
C'est dans le Tax/Model/Calculation.php
fichier, il fait donc référence à ce bloc de code :
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;
}
La méthode que je modifie est 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;
}
La solution
Au lieu de
$cust = Mage::getModel('customer/customer')->load($customerId);
Essayez d'utiliser ceci :
$cust = $this->getCustomer();
mais fais attention. $cust
peut être null
dans certains cas.
En passant, cela n’a pas l’air bien :
$custAdmin = Mage::getSingleton('customer/session')->getCustomer();
$custAdminId = $custAdmin->getId();
$region = Mage::getModel('directory/region')->load($custAdminId);
$stateCode = $region->getCode();
$stateName = $region->getName();
vous obtenez ensuite l'identifiant client de la session, en chargeant la région avec le même identifiant que le client.
Je suis sûr que ce n'est pas ce que vous voulez faire.