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;
}
Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à magento.stackexchange
scroll top