У меня проблема с округлением сумм налоговых классов в WooCommerce 3.2.3 на WordPress 4.8.3.
Суммы каждого из 2 классов налогов правильно отображаются с двумя десятичными знаками при отображении на странице корзины и оформления заказа.
Однако при вычислении общей суммы корзины суммы налогового класса складываются вместе в сумму промежуточного итога налога, используя 4 значения десятичной точки, а затем округляются.
Это может вызвать ошибку округления 0,01, как объяснено в примере ниже, где, если вы добавите промежуточный итог позиции вместе с отображаемыми суммами налоговых классов, вы получите 221,61 €, а не отображается 221,62 €.
Пример (цены без налога, доставка не включена):
Продукт XXX (относится к налоговому классу 19%): 161,28 €
Продукт YYY (относится к 7% налоговому классу): 27,75 €
Итого по продукту = 189,03 €
MwSt. 19% 30,64 €
MwSt. 7% 1,94 €
Общая сумма корзины: 221,62 €
Вопрос:
Как заставить WooCommerce использовать 2 десятичных знака для сумм налоговых классов при сложении их вместе для расчета общей суммы корзины?
Настроить:
Я понимаю причину использования точности 4dp в вычислениях, но в нашем случае это не требуется.
Я добавил отладочный вывод в код WC и увидел, что суммы отдельных классов налога в приведенном выше примере хранятся с 4 десятичными знаками:
MwSt. 19% 30,6432
MwSt. 7% 1,9425
Сумма налога здесь составляет 32,5857, округленная до 32,59 € при расчете итоговой суммы корзины, в отличие от 32,58 €, вызывая разница 0,01.
В поисках решения этой проблемы я обнаружил множество различных проблем с расчетом налогов, но не совсем схожий вариант использования.
Я пытался изменить код WooCommerce, но мне не удалось найти правильное место в WooCommerce, где я мог бы установить / жестко закодировать точное вычисление для использования 2dp, а не 4dp, но это, возможно, было бы не самым идеальным решением в любом случае ,
Примечание. Если я изменю настройку «Отображать сумму налога» на «Итого» вместо «Детализировано», то отображаемая промежуточная сумма налога 32,59 €.
В этой настройке общая сумма в корзине 221,62 € равна сумме перечисленных промежуточных итогов, но клиент требует, чтобы налоги отображались по отдельности.
Извините за длинное описание. По моему недавнему опыту, это необходимо для правильного объяснения вопросов, связанных с исчислением налогов.
У кого-нибудь есть предложения по решению этой проблемы?
Большое спасибо за ваш совет и время!
Маскета
Сначала вы должны искать, как рассчитывается налог в WooCommerce … Если вы идете в WooCommerce WC_Cart
код класса, вы увидите, что WC_Tax
класс несет ответственность за это …
В исходном коде WC_Tax
методы, которые делают расчеты (с соответствующими доступными крючками фильтра изменить эти расчеты):
calc_tax()
с доступным фильтрующим крючком woocommerce_calc_tax
.calc_shipping_tax()
с доступным фильтрующим крючком woocommerce_calc_shipping_tax
.round()
с доступным фильтрующим крючком woocommerce_tax_round
.calc_inclusive_tax()
с доступным фильтрующим крючком woocommerce_price_inc_tax_amount
.calc_exclusive_tax()
с доступным фильтрующим крючком woocommerce_price_ex_tax_amount
.Вот пример, чтобы изменить round()
поведение вернуть округление до .5
центов:
add_filter( 'woocommerce_tax_round', 'euro_5cent_rounding' );
function euro_5cent_rounding( $in ) {
return round( $in / 5, 2 ) * 5;
}
Код находится в файле function.php вашей активной дочерней темы или активной темы (или также в любом файле плагина).
Поскольку ваша проблема очень специфична и ее трудно воспроизвести, вам нужно будет найти, какой хук поможет решить вашу проблему …
Других решений пока нет …