Как применять Налоговые правила, основанные на наличии НДС


Налоговые правила моего магазина должны быть очень просты в настройке, но мне крайне сложно найти способ реализовать нужную мне логику.

Мы находимся во Флориде, поэтому ни с одного из наших клиентов не будет взиматься налог , если только они не отправляют товары в штат Флорида. Некоторые из наших клиентов во Флориде являются перепродавцами и освобождены от уплаты налогов.

Как я могу настроить свою налоговую логику следующим образом:

IF (customer is in Florida) {
    THEN IF (customer has VAT) {
        No tax charged
    } ELSE (customer does not have VAT) {
        7% tax is charged
} ELSE (not in Florida) {
    No tax charged
}
 1
tax
Author: travisw, 2015-06-22

1 answers

Первоначальное решение, которое я опубликовал, оказалось лишь частичным решением. Большое спасибо Мариусу за ответ на этот вопрос. С его помощью и некоторой информацией из этого вопроса я смог собрать воедино рабочее решение.

Краткое описание

У меня есть единое налоговое правило, которое охватывает все налоговые классы продуктов и клиентов. Это, по сути, захват процесса расчета налогов, чтобы проверить, находится ли клиент во Флориде, и если да, то есть ли у них налог Заполнено поле НДС?

Код

Я расширил правила расчета налогов, создав файл /app/code/local/Mage/Tax/Model/Calculation.php

Вот последний (рабочий) блок кода:

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;
}
 1
Author: travisw, 2017-04-13 12:55:04