Estoy usando Zapier para exportar pedidos de WooCommerce al software de mi cuenta cuando se crea un pedido. Los datos se envían a través de la API REST de WooCommerce.
Todo funciona bien, pero noté que el precio unitario en los metadatos del pedido a veces muestra los precios de los productos con más de 2 decimales. Esto sucede cuando se pide más de uno del mismo artículo. Parece que siempre sucede cuando el precio del artículo tiene dos decimales y se ordena en múltiplos de números impares.
Mi software de contabilidad solo acepta hasta 2 decimales. Entonces hay un error cada vez que el precio unitario tiene más de dos decimales. Así es como descubrí este problema.
He comprobado el precio del artículo y los precios son correctos. También probé habilitando y deshabilitando “Redondear impuestos a nivel de subtotal, en lugar de redondear por línea”. Nada parece resolver el problema.
Me gustaría filtrar el precio unitario cuando se genera un pedido en WooCommerce para que se conviertan a dos decimales. Cualquier idea o sugerencia sobre cómo resolver esto sería apreciada.
Este es un ejemplo de un solo pedido en el que el artículo se muestra con más de 2 decimales:
isCreditInvoice:false
customer:d58ca99b-07f3-45fa-80ae-164ebbc881f1
invoiceDate:2021-03-07T09:18:06+02:00
quantity:1,1,1,1,1,1,2,6,6,5,7,7,4,10,10,1,1,1,1,1,1,1,1
yourReference:Order Number 6631
deliveryDate:{{111079934__date_completed}}
ourReference:Order Number 6631
unitPrice:22.5,22.5,26.25,25,34.95,34.95,23.76,6.95,6.95,6.95,9.950000000000001,9.950000000000001,9.95,1.6,1.6,14.95,23.4,8.4,30,21.36,25,12.5,26.5
Actualización: este es un problema de WooCommerce Plugin Core y ya se ha informado a WooCommerce en Github
https://github.com/woocommerce/woocommerce/issues/27911
Use el siguiente parche para solucionar el problema temporalmente:
Vaya a la línea 172 de woocommerce/includes/rest-api/Controllers/Version2/class-wc-rest-orders-v2-controller.php
Reemplazar:
$data['price'] = $item->get_quantity() ? $item->get_total() / $item->get_quantity() : 0;
Con:
$data['price'] = $item->get_quantity() ? wc_format_decimal( $item->get_total() / $item->get_quantity() ): 0;
Probado y funciona.
Ahora el precio unitario se redondeará a dos decimales.
.