Sin impuesto Con impuesto

Una casilla de aceptación extra en el checkout desde un módulo

Gustavo usa el hook termsAndConditions para que el cliente acepte la recogida en tienda o un plazo concreto antes de pagar. Explicamos cómo funciona, un ejemplo condicionado al transportista y por qué una casilla de «puede haber retrasos» fue considerada abusiva.

Equipo Rekire
Actualizado: 29/09/2024 7
Una casilla de aceptación extra en el checkout desde un módulo
Compartir:

Gustavo usa desde hace tiempo un truco para que el cliente tenga que aceptar algo concreto antes de pagar: que irá a recoger el pedido al almacén o a la tienda física, o que un producto tardará más en llegar. PrestaShop lo permite de serie con el hook termsAndConditions. Un módulo añade sus propias casillas junto a la de las condiciones generales y el cliente no puede pagar sin marcarlas.

Cómo funciona

En el último paso del checkout, PrestaShop reúne las «condiciones a aprobar»: la de las condiciones generales y las que devuelvan los módulos enganchados a termsAndConditions. Cada una es un objeto TermsAndConditions con un identificador y un texto. Todas salen como casillas, y el botón de pago no se activa hasta que el cliente las marca.

Gustavo compartió en el grupo el núcleo de su código: crear un objeto por cada condición, darle identificador y texto, y devolver la lista. Partiendo de esa idea, este ejemplo muestra la casilla solo cuando el cliente ha elegido el transporte de recogida en tienda:

use PrestaShop\PrestaShop\Core\Checkout\TermsAndConditions;

// En install(): $this->registerHook('termsAndConditions')

public function hookTermsAndConditions($params)
{
    $cart = $this->context->cart;
    $carrier = new Carrier((int) $cart->id_carrier);

    // Solo si el cliente ha elegido el transporte de recogida
    if ((int) $carrier->id_reference !== (int) Configuration::get('MIMODULO_REF_RECOGIDA')) {
        return [];
    }

    $condicion = new TermsAndConditions();
    $condicion->setIdentifier('mimodulo-recogida');
    $condicion->setText($this->l('He leído el horario y las condiciones de recogida en tienda y los acepto.'));

    return [$condicion];
}

Detalles del ejemplo

  • Compara la referencia del transportista, no su id. Cada vez que editas un transportista, PrestaShop crea uno nuevo con otro id; id_reference se mantiene.
  • El carrito léelo del contexto ($this->context->cart). Desde ahí tienes lo que usaba Gustavo: el peso total con getTotalWeight(), el transportista elegido o los productos.
  • Si quieres un enlace dentro del texto, el trozo enlazado se marca entre corchetes y la URL se pasa como argumento extra de setText(), igual que hace PrestaShop con su casilla de condiciones.
  • El identificador debe ser único: es lo que usa PrestaShop para saber qué casilla ha marcado el cliente.

Para qué lo usaba Gustavo

  • Recogida en tienda o en almacén: que el cliente acepte el horario y la forma de recogida.
  • Productos sin stock que se pueden comprar: revisaba los productos del carrito y, si alguno no tenía stock pero admitía pedidos, añadía la condición con el plazo.
  • Retrasos excepcionales: durante las semanas de la DANA de Valencia, a finales de octubre de 2024, ofreció en el grupo un módulo suyo con una casilla así para avisar de retrasos en los pedidos.

Ojo con lo que haces aceptar

Unos meses después, otro miembro del grupo contó que había usado una casilla de este tipo para avisar de que podía haber retrasos en las entregas. Al consultarlo con consumo, le dijeron que esa cláusula era abusiva: si das un plazo de entrega, una casilla genérica de «puede haber retrasos» no te libera de cumplirlo.

La casilla sirve para informar y dejar constancia de un hecho concreto: recoges tú, este producto llega en quince días, este artículo se fabrica por encargo. No sirve para que el cliente renuncie a sus derechos. Lo que la ley no permite en las condiciones generales tampoco lo permite una casilla más.

Si necesitas gestionar varios consentimientos y textos legales en el checkout, en Rekire tenemos RKR Legal Assistant.

Esto salió en @PrestashopEsp, la mayor comunidad PrestaShop de España en Telegram. Ver la conversación

Cargando...
Cookies
Volver arriba