Añadir en WooCommerce una opción para cobrar un «recargo de equivalencias»

En el siguiente turorial vamos a desarrollar una funcionalidad muy interesante para clientes de WooCommerce con negocios online de venta B2B. Es una funcionalidad 100% extensible y con opción de llevarla a un plugin más avanzado.

Esta funcionalidad consistirá en calcular y añadir el famoso Recargo de equivalencias en todos aquellos clientes que quieran acogerse a este sistema simplificado. Pensado para comerciantes que no tienen que declarar ni liquidar el IVA en sus ventas.

El comerciante soportará una mayor carga impositiva en las compras al proveedores. Es un regimen pensado para ahorrar trámites administrativos, evitando presentar declaraciones trimestrales o anuales.

Para que tengamos un poco más de información, este recargo solo es válido para minoristas que venden productos sin transformarlos. En el momento que se manipulan de alguna forma, no te puedes acoger a este regimen.

Los productos que vendan en el B2B incluirán el IVA + el recargo de equivalencias correspondiente y que variará según el tipo de producto. Estos son los porcentajes que se aplicarán:

  • 5,2% para productos gravados con el tipo general del 21%.
  • 1,4% para productos gravados con el tipo reducido del 10%.
  • 0,5% para productos gravados con el tipo superreducido del 4%.

Algunos ejemplos de negocios online que podrían usar el Recargo de Equivalencia:

  • Tiendas online de ropa o accesorios: Venden productos tal como los reciben de los fabricantes.
  • E-commerce de productos de alimentación: Como frutas, verduras, bebidas o productos no perecederos.
  • Tiendas online de tecnología o gadgets: Que revenden productos electrónicos sin realizar ningún tipo de modificación.
  • E-commerce de juguetes o productos para bebés.

Algunos casos en los que NO se utiliza:

  • Negocios de dropshipping: No suelen aplicar Recargo de Equivalencia ya que el comerciante actúa como intermediario entre el fabricante y el cliente.
  • Tiendas online de productos personalizados: Si el comerciante transforma o personaliza el producto antes de venderlo, no aplica este régimen.
  • E-commerce gestionados por sociedades: Empresas que gestionan tiendas online como personas jurídicas no pueden acogerse al Recargo de Equivalencia.

Ahora que tenemos un poco de contexto sobre como y cuando aplicar este recargo de equivalencias, vamos a desarrollar una idea que iremos extendiendo con el tiempo para satisfacer todas las necesidades de nuestros clientes con negocios B2B y WooCommerce.

Comenzamos…

Os cuento sobre un caso real de un cliente mio que me ha pedido añadirle a ciertos usuarios de WooCommerce este recargo de equivalencias, en mi caso tengo que sumar el 5,2% porque es un negocio B2B de ropa y complementos para bebes.

Después de recoger todas las necesidades de mi cliente, el planteamiento que propongo es el siguiente:

Agregar checkbox en el perfil de usuario

Necesitamos agregar un campo personalizado (Checkbox) al perfil del usuario para que el administrador o un usuario con permisos pueda marcar si ese usuario se acoge o no al recargo de equivalencias.

El siguiente código creará una sección en la ficha de usuario con el checkbox correspondiente y guardará en la base de datos junto con el ID de usuario si se acoja al recargo de equivalebncias. Ese dato lo vamos a necesitar mas adente, tanto en el carrito como en el checkout.

Para ello usaremos 4 Hooks interesantes para mostrar el campo personalizado en la ficha del perfil de los usuarios así como para guardar y actualizar esta información en la base de datos.

Puedes copiar y pegar todos los siguientes snippets en un plugin de funcionalidades o en el archivo functions.php de tu tema en funcionamiento.

*Acuérdate de modificar el texto tu-text-domain con el de tu child theme. ¿Para qué? para detectarlo y poder traducir las cadenas de texto originales.

<?php
// Añadir campo de Recargo de Equivalencia en el perfil de usuario
function agregar_recargo_equivalencia_campo($user) {
    ?>
    <h3><?php _e('Opciones de IVA', 'tu-text-domain'); ?></h3>
    <table class="form-table">
        <tr>
            <th><label for="recargo_equivalencia"><?php _e('Recargo de Equivalencia', 'tu-text-domain'); ?></label></th>
            <td>
                <input type="checkbox" name="recargo_equivalencia" id="recargo_equivalencia" value="1" <?php checked(get_the_author_meta('recargo_equivalencia', $user->ID), 1); ?> />
                <span class="description"><?php _e('Marcar si el usuario tiene Recargo de Equivalencia.', 'tu-text-domain'); ?></span>
            </td>
        </tr>
    </table>
    <?php
}
add_action('show_user_profile', 'agregar_recargo_equivalencia_campo');
add_action('edit_user_profile', 'agregar_recargo_equivalencia_campo');

// Guardar el valor del campo personalizado
function guardar_recargo_equivalencia_campo($user_id) {
    if (!current_user_can('edit_user', $user_id)) {
        return false;
    }
    update_user_meta($user_id, 'recargo_equivalencia', $_POST['recargo_equivalencia'] ? 1 : 0);
}
add_action('personal_options_update', 'guardar_recargo_equivalencia_campo');
add_action('edit_user_profile_update', 'guardar_recargo_equivalencia_campo');
?>
Así es como se verá la nueva sección en el perfil de usuario de WordPress.

Modificar la función del carrito para aplicar el recargo si el usuario lo tiene activado

Ahora modificamos la función agregar_recargo_equivalencia para que se active solo si el usuario tiene marcada la opción de Recargo de Equivalencia.

El hook woocommerce_cart_calculate_fees en WooCommerce permite agregar tarifas personalizadas al carrito de compras antes de que el cliente complete el pedido. Se utiliza para modificar el cálculo de los totales añadiendo, eliminando o ajustando tarifas según condiciones personalizadas, como promociones, recargos específicos o descuentos.

Puedes aplicar tarifas solo si se cumplen ciertas condiciones, como el tipo de producto, ubicación geográfica o si el usuario tiene activada alguna opción (como suscripción o recargo).

Este hook es versátil y permite añadir lógicas personalizadas para modificar los totales del carrito de forma dinámica, haciendo el proceso de pago más flexible.

En la variable tasa de recargo almacenamos el porcentaje que vamos a multiplicar. este puede ser también 0.04 o 0.012.

        // Definir la tasa del recargo de equivalencia (ejemplo 5.2%)
        $tasa_recargo = 0.052;
<?php
// Añadir recargo de equivalencia al subtotal de los pedidos
add_action('woocommerce_cart_calculate_fees', 'agregar_recargo_equivalencia', 20, 1);

function agregar_recargo_equivalencia($cart) {
    if (is_admin() && !defined('DOING_AJAX')) {
        return;
    }

    // Asegúrate de que el carrito no esté vacío
    if (WC()->cart->is_empty()) {
        return;
    }

    // Verificar si el usuario tiene activado el recargo de equivalencia
    $user_id = get_current_user_id();
    $tiene_recargo = get_user_meta($user_id, 'recargo_equivalencia', true);

    if ($tiene_recargo) {
        // Definir la tasa del recargo de equivalencia (ejemplo 5.2%)
        $tasa_recargo = 0.052;

        // Obtener el subtotal sin impuestos
        $subtotal_sin_impuestos = $cart->get_subtotal();

        // Calcular el recargo de equivalencia
        $recargo_equivalencia = $subtotal_sin_impuestos * $tasa_recargo;

        // Aplicar el recargo como una tarifa adicional
        $cart->add_fee(__('Recargo de Equivalencia (5,2%)', 'tu-text-domain'), $recargo_equivalencia);
    }
}
?>
Comprueba que el Recargo de equivalencias se reflejan en el carrito y el checkout

¿Necesitas un desarrollo web en WordPress a medida?

Me especializo en desarrollar sitios webs avanzados, programando soluciones personalizadas para proyectos web.

Reflejar el recargo en los correos y facturas

Para mostrar el recargo de equivalencia en el correo de WooCommerce y las facturas, podemos usar el siguiente hook woocommerce_email_order_meta para añadir información en los correos de confirmación de pedido:

<?php
// Mostrar el recargo de equivalencia en el correo de confirmación de pedido
add_action('woocommerce_email_order_meta', 'mostrar_recargo_equivalencia_email', 20, 4);

function mostrar_recargo_equivalencia_email($order, $sent_to_admin, $plain_text, $email) {
    $user_id = $order->get_user_id();
    $tiene_recargo = get_user_meta($user_id, 'recargo_equivalencia', true);

    if ($tiene_recargo) {
        echo '<p><strong>' . __('Recargo de Equivalencia', 'tu-text-domain') . ':</strong> ' . __('Este pedido incluye Recargo de Equivalencia.', 'tu-text-domain') . '</p>';
    }
}
?>
El email también refleja el Recargo de equivalencias

Si estás usando un plugin de facturación como WooCommerce PDF Invoices & Packing Slips, puedes ajustar las plantillas de las facturas para incluir la misma lógica. Aquí tienes un ejemplo básico para incluir el recargo en las facturas:

<?php
// Añadir recargo de equivalencia en las facturas PDF
add_action('wpo_wcpdf_after_order_details', 'mostrar_recargo_equivalencia_factura', 10, 2);

function mostrar_recargo_equivalencia_factura($document, $order) {
    $user_id = $order->get_user_id();
    $tiene_recargo = get_user_meta($user_id, 'recargo_equivalencia', true);

    if ($tiene_recargo) {
        ?>
        <table class="order-details">
            <tr>
                <th><?php _e('Recargo de Equivalencia', 'tu-text-domain'); ?></th>
                <td><?php _e('Este pedido incluye Recargo de Equivalencia.', 'tu-text-domain'); ?></td>
            </tr>
        </table>
        <?php
    }
}
?>
Factura «WooCommerce PDF Invoices & Packing Slips» con Recargo de equivalencias

Siéntete libre de utilizar y modificar las funciones para realizar otro tipo de acciones que modifiquen los totales de los carritos.

si has completado todos los pasos del tutorial. ¡Enhorabuena! has introducido una función importante para negocios B2B.

Esto podría ser el inicio de un plugin que puede ir creciendo y adaptandose a otros escenarios y necesidades de otros clientes.

¿Hacia donde evoluciona el plugin o funcionalidad?

  • Crea un plugin y súbelo al repositorio de WordPress.
  • La funcionalidad debería detectar los impuestos de cada artículo del carrito y aplicarle su correspondiente Recargo de equivalencias. Existen negocios como por ejemplo una Ortopedia en el que hay productos con el 21%, 10% y 4% de IVA. Para sumar el 5,2%, 1,4% y 0,5% a sus correspondientes productos.
  • Añade otros campos personalizados que incluyan otro tipo de recargos, por ejemplo 5€ extra en los productos de la categoría tal por gastos de embalaje.

Espero que se haya entendido bien y no dudes en preguntar lo que sea sobre el tema. Recueda «Si lo puedes imaginar lo puedes programar».

Sobre el autor

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *