¿Cómo se almacenan los reembolsos parciales en la base de datos de WooCommerce?

3 minutos de lectura

avatar de usuario
ben mannino

Tengo una herramienta de administración de back-end simple escrita en PHP que extrae pedidos de la base de datos de WooCommerce y los presenta a nuestra cocina para procesar las entregas.

Siempre he podido resaltar una fila de la tabla que tenía un estado distinto de 'wc-completed' para manejar cualquier procesamiento adicional que pueda ser necesario. Sin embargo, hoy me llamó la atención que un pedido en particular había sido reembolsado por un artículo de línea. A reembolso parcial no cambia el estado del pedido, por lo que necesito obtener la información de reembolso de otra tabla en la base de datos.

Revisé todas las tablas que conozco relacionadas con el procesamiento de pedidos: wp_posts, wp_postmeta, wp_woocommerce_order_items y wp_woocommerce_order_itemmeta, pero no hay señales de ninguna información de reembolso. De hecho, el itemmeta contenido en la última tabla ni siquiera ajusta la cantidad, lo que hace que mis informes sean incorrectos para pedidos parciales como este.

Cuando ve el resumen del pedido en el backend de woocommerce, muestra una cantidad de 1 para este artículo en particular, y luego un -1 justo debajo de él. Supongo, en base a esto, que en algún lugar de la base de datos hay registros de reembolso asociados con los pedidos, pero parece que no puedo encontrarlo. Incluso el total del pedido en wp_postmeta no refleja el reembolso parcial.

¿Alguien sabe dónde se almacenan estos datos de reembolso en la base de datos de wordpress?

Gracias.

avatar de usuario
LoicTheAztec

Órdenes de reembolso parcial se almacenan en la base de datos como los normales: En wp_posts mesa con un 'post_type' = 'shop_order_refund' y un 'post_parent' = order_ID (number)donde el order_ID es la referencia al original 'shop_order'.

Para saber cuáles de estas devoluciones son parciales, necesita el _refund_amount valor de la cantidad que puede encontrar en wp_post_meta para esto 'refund_order' y su correspondiente 'shop_order' con el _order_total valor también:

si ( 'refund_order' => _refund_amount ) != ( 'shop_order' => _order_total ) : Entonces es parcial.

si ( 'refund_order' => _refund_amount ) == ( 'shop_order' => _order_total ) : Entonces es normal (no parcial).

Notas:

  • Puede tener uno o varios reembolsos parciales para un pedido.
  • hay para órdenes de reembolso un _order_total artículo en wp_postmeta tabla con un valor negativo que siempre refleja el valor positivo de _refund_amount artículo. Este _order_total El valor no tiene nada que ver con el padre relacionado 'shop_order' => '_order_total' valor.

    Es lo contrario (negativo) valor de la padre relacionado 'shop_order' => '_order_total' valor
    solo cuando el pedido de reembolso NO ES PARCIAL.

  • En wp_woocommerce_order_items y wp_woocommerce_order_itemmeta tablas, hay datos detallados relacionados con los productos en pedidos y pedidos reembolsados…

  • ¡Perfecto! Gracias, esa era justo la información que necesitaba. Muy apreciado.

    – Ben Manino

    9 de junio de 2016 a las 16:52

  • @BenMannino, ¿podría compartir la consulta, si la tiene, que devolvería todos los pedidos reembolsados? parcial y total?

    – pakalbekim

    1 de febrero de 2021 a las 18:04

¿Ha sido útil esta solución?