Проблема метода WooCommerce add_fee, влияющего на НДС доставки при применении скидки

Вопрос или проблема

Я использую следующий код для применения скидки 5% для метода оплаты банковским переводом:

add_action('woocommerce_cart_calculate_fees', 'add_custom_checkout_fee_for_gateway');

function add_custom_checkout_fee_for_gateway() {
    $chosen_gateway = WC()->session->get('chosen_payment_method');

    if ($chosen_gateway == 'bacs') {
        $cart_subtotal = WC()->cart->get_subtotal();
        $discount = ($cart_subtotal * -0.05);
        WC()->cart->add_fee('Money Transfer Discount (5%)', $discount, false, '');
    }
}

Я установил третий параметр в false, чтобы убедиться, что НДС не применяется.

Мои транспортные расходы следующие:

  • Стоимость доставки без НДС: ₺58.33
  • Сумма НДС для доставки: ₺11.67
  • Общая стоимость доставки с НДС: ₺70.00

Когда я применяю скидку за банковский перевод, сумма НДС за доставку обновляется до ₺11.28. Однако, я хочу, чтобы скидка применялась только к товарам в корзине, а не к расходам на доставку. Как я могу это исправить?

Ответ или решение

Ваша проблема связана с тем, что метод add_fee в WooCommerce неявно изменяет сумму налога на доставку, хотя вы намерены применять скидку только к подытогу корзины, а не к стоимости доставки. Рассмотрим, как можно решить эту проблему, чтобы сохранить корректное налогообложение на доставку в вашем интернет-магазине на WooCommerce.

Анализ проблемы

В вашей функции add_custom_checkout_fee_for_gateway, при выборе оплаты через банковский перевод, вы правильно вычисляете скидку на основании подытога корзины и добавляете её как отрицательный взнос с помощью метода add_fee. Однако изменение налогооблагаемой базы (в вашем случае, применительно к подытогу корзины) приводит к изменению итоговой суммы налога на доставку. Чтобы это исправить, важно обеспечить раздельный учет налога на товары и налога на услуги доставки.

Решение

Для устранения влияния скидки на расчет НДС на доставку, вы можете воспользоваться следующим методом:

  1. Корректировка функции расчета скидки: Удостоверьтесь, что скидка применяется только на товары в корзине без учета доставки.

  2. Использование внутренних методов WooCommerce:

    • Добавьте логическое условие для комбинирования скидок с категоризацией товарных позиций, чтобы четко различать, к чему применяется скидка.
    • Применяйте add_fee, избегая воздействия на налогооблагаемую базу для доставки.

Пример кода для корректировки расчета скидки:

add_action('woocommerce_cart_calculate_fees', 'add_custom_checkout_fee_for_gateway', 10, 1);

function add_custom_checkout_fee_for_gateway($cart) {
    if (is_admin() && !defined('DOING_AJAX')) return; // Избежать выполнения в админке

    $chosen_gateway = WC()->session->get('chosen_payment_method');

    if ('bacs' === $chosen_gateway) {
        $cart_subtotal_ex_shipping = $cart->get_subtotal() - $cart->get_shipping_total();
        $discount = ($cart_subtotal_ex_shipping * -0.05);
        $cart->add_fee(__('Money Transfer Discount (5%)', 'textdomain'), $discount, false);
    }
}

Важно учесть

  • Не влияет на налогооблагаемую базу доставки: Третьим параметром у метода add_fee по-прежнему передается false, чтобы не учитывать НДС при расчете скидки.
  • Тестирование: Перед применением изменений в рабочей среде протестируйте логику на тестовом магазине.

Таким образом, вы сохраните воспользоваться скидкой, не затрагивая налогообложение услуги доставки. Это решение позволит обеспечить корректное расчётное поведение и улучшить пользовательский опыт в вашем интернет-магазине, повышая лояльность клиентов и их удовлетворенность.

Оптимизация для SEO: При использовании WooCommerce и методики предоставления скидок, ваши пользователи получат более точные подсчёты, особенно при использовании специфичных способов оплаты, таких как банковский перевод. Корректное управление налогами способствует повышению NMV (Net Merchandise Value) и снижает количество брошенных корзин, что является важными аспектами для SEO и UX.

Оцените материал
Добавить комментарий

Капча загружается...