PS PrestaShop Intermedio

Alquiler de Productos — Guía completa

Instalar, configurar y explotar el alquiler de productos: calendario, planning, unidades con números de serie, check-in/check-out, temporadas, tarifas planas, fianza en línea separada o huella Stripe, solicitudes sin pago, packs, API REST, webhooks y emails de recordatorio, para PrestaShop 8 y 9.

Actualizado Versión del módulo 1.10.0

Presentación

El módulo Alquiler de Productos (dfproductrental) añade un modo alquiler activable producto a producto en su tienda PrestaShop, y cubre después toda la explotación del parque. En la ficha de un producto alquilable, el cliente elige sus fechas en un calendario que ensombrece los días reservados, como rango, en dos campos con horas o como fecha de inicio más número de semanas. El precio se calcula por día mediante tramos decrecientes, un porcentaje del precio de venta o coeficientes de duración, modulado por temporadas y tarifas planas. La fianza vive en una línea dedicada del carrito, reembolsable con factura de abono, o pasa a huella bancaria Stripe. En el back-office: planning mensual, unidades con números de serie, check-in y check-out con estado del material y retención, estadísticas, solicitudes sin pago, packs sincronizados, API REST, webhooks salientes y emails de recordatorio por cron.

Ideal para material, mobiliario, equipamiento de eventos, instrumentos, vehículos o herramientas: todo artículo que se alquila en lugar de venderse de una vez por todas. El modo alquiler solo se activa en los productos que usted designe.

Compatibilidad

  • PrestaShop 8.0 a 9.x
  • PHP 7.4 a 8.3
  • Monotienda y multitienda
  • 5 idiomas: FR, EN, ES, DE, IT (calendario también en NL, PT y PL)
  • Tema Classic y temas personalizados
  • Sin dependencias: sin Composer, autoloader PSR-4 manual, calendario flatpickr integrado localmente

Instalación

  1. En el back-office, abra Módulos > Gestor de módulos.
  2. Pulse Subir un módulo y seleccione el archivo dfproductrental.zip.
  3. Una vez instalado, pulse Configurar.

En la instalación, el módulo crea sus cinco tablas (df_rental_product, df_rental_tier, df_rental_booking, df_rental_unit, df_rental_unit_assign), registra sus hooks, inicializa sus ajustes y añade cinco entradas bajo Catálogo > Alquiler: Productos en alquiler, Reservas, Planning, Unidades y Estadísticas. La actualización desde cualquier versión anterior está soportada por scripts tolerantes: suba simplemente el nuevo ZIP encima y vacíe la caché de PrestaShop.

Ajustes generales

  • Plazo de preparación (días): días bloqueados tras cada devolución para preparar el artículo. Valor global, sobrescribible por producto.
  • Horizonte de reserva (días): hasta qué fecha futura puede reservar un cliente (365 por defecto).
  • Caducidad de carritos pendientes (minutos): pasado el plazo, una reserva no confirmada libera sus fechas (60 por defecto).
  • Facturar la fianza: activa la línea de fianza del carrito; desactivada, la fianza se muestra sin cobrarse (modo huella).
  • Facturar el día de la devolución: sí, recuento de calendario, el día de la devolución es un día de alquiler (del 14 al 20 = 7 días); no, modelo rotación, la devolución ocurre el día siguiente al periodo facturado (del 14 al 21 = 7 días, una semana va de lunes a lunes), quedando ese día no disponible para otra salida.
  • Días de cierre semanales: días sin salida ni devolución posible (0 = domingo a 6 = sábado, separados por comas). Un alquiler puede cubrir un día cerrado.
  • Fechas de cierre: una fecha por línea, AAAA-MM-DD (puntual) o MM-DD (recurrente cada año, ej. 12-25).
  • Temporadas tarifarias: una por línea, inicio|fin|multiplicador|etiqueta (ver más abajo).
  • Emails de recordatorio automáticos y días de antelación: recordatorios antes del inicio y de la devolución, aviso de retraso, disparados por la URL cron mostrada bajo el formulario.
  • Webhooks salientes y URL del webhook: notifican su software en cada evento de reserva (ver más abajo).
  • Fianza por huella Stripe, clave publicable y clave secreta: ver la sección Fianza.
  • Selección de fechas, fechas globales del carrito, elección de fechas solo en el carrito, horas de recogida y devolución, posición del bloque, ocultación del botón de compra nativo.
  • Modo de fianza (por producto, global automática, desactivada), todo el catálogo en alquiler, cuadrícula de coeficientes, sincronización de packs, caducidad de solicitudes, API.

Configurar un producto alquilable

Vaya a Catálogo > Alquiler > Productos en alquiler, luego Añadir: producto, activación, modo de tarificación (importes fijos, porcentaje del precio de venta o coeficiente), precio base diario, fianza, duración mínima y máxima, unidades disponibles, plazo de preparación, solicitud sin pago y bloqueo del stock por solicitudes.

Tramos decrecientes

Cada tramo se define por un día mínimo, un día máximo y un precio diario. El módulo aplica el tramo cuyo intervalo contiene la duración elegida; un día máximo a 0 significa ilimitado; sin tramo correspondiente, se aplica el precio base. Ejemplo: 39/día de 1 a 3 días, 32/día de 4 a 7 días, 26/día desde 8 días.

Tarifas planas

Bajo los tramos, la zona Tarifas planas acepta una por línea con el formato días|precio sin IVA|etiqueta, por ejemplo 7|199|Tarifa semanal. Cuando la duración elegida coincide exactamente, este precio redondo sustituye todo el cálculo: ni tramos, ni coeficientes, ni temporadas. Combinada con el modo de fechas por semanas, hace la oferta perfectamente legible.

Modo porcentaje

El precio base diario, la fianza y los tramos se expresan como porcentaje del precio de venta sin IVA del producto. Un producto vendido a 1000 con una fianza de 10 exige 100 de fianza. Los importes siguen automáticamente los precios del catálogo.

Uso en la tienda

Elección de fechas

Tres modos de selección, ajustados globalmente: un rango único en un calendario de dos meses, dos campos de inicio y fin (con horas de recogida y devolución opcionales), o fecha de inicio más número de semanas, calculándose automáticamente la fecha de devolución y el precio total. Los días reservados aparecen ensombrecidos; los días de cierre no pueden ser ni salida ni devolución. Las fechas globales del carrito aplican un periodo único a todo el pedido, modificable desde el carrito.

Precio y reserva

Un resumen detalla el número de días, el precio diario aplicado, el total del alquiler, la fianza y el total general. El botón de reserva añade el alquiler al carrito: el precio se inyecta mediante un precio específico ligado al carrito, permaneciendo intacto el precio de catálogo, y la fianza eventual aparece en su propia línea. Una reserva pendiente bloquea las fechas; los carritos no confirmados caducan; la validación del pedido confirma la reserva.

Fianza: línea dedicada o huella Stripe

Fianza facturada

Con Facturar la fianza activo, la fianza aparece como línea dedicada del carrito: un producto técnico Fianza de alquiler, sin IVA, oculto del catálogo, lleva el total de las fianzas del pedido. El precio de los productos alquilados solo contiene el alquiler. En la factura, la fianza es una línea aparte; su reembolso a la devolución del material se resuelve con una factura de abono sobre esa línea, desde la ficha de pedido. Si el cliente elimina la línea de fianza de su carrito, se recrea automáticamente. El importe proviene del modo elegido: fianza por producto, o global automática (importe base con IVA multiplicado, con mínimo y redondeo, modificable en el back-office).

Huella bancaria Stripe

Con Facturar la fianza desactivado y Fianza por huella Stripe activado (claves pk_ y sk_ rellenadas), no se cobra nada. Tras su pedido, el cliente es invitado desde la página de confirmación a registrar su tarjeta en una página segura impulsada por Stripe Elements: ningún dato de tarjeta pasa por la tienda, no se carga ni bloquea ningún importe.

En caso de daños constatados a la devolución: abra la reserva, introduzca la fianza retenida y su motivo, guarde, y pulse Cobrar la retención vía Stripe. El importe se carga fuera de sesión en la divisa del pedido y el identificador del pago se conserva en la reserva. Un rechazo bancario (3-D Secure) se muestra tal cual; la retención queda entonces por cobrar de otro modo.

¿Por qué no una preautorización clásica? Las redes de tarjetas hacen caducar las preautorizaciones a los 7 días: imposible cubrir un alquiler más largo. El registro de tarjeta no caduca; es el modelo de las plataformas de alquiler. La cuenta Stripe usada es independiente del módulo de pago de la tienda.

Unidades y números de serie

En Catálogo > Alquiler > Unidades, cree una ficha por ejemplar físico: producto, referencia o número de serie, estado (disponible o en mantenimiento), activación, nota interna. En cuanto un producto tiene al menos una unidad, su capacidad de alquiler pasa a ser el número de unidades activas y disponibles: la cantidad configurada deja de usarse, y poner una unidad en mantenimiento la retira del stock sin tocar la configuración.

En cada reserva, el campo Unidades asignadas ofrece las unidades libres en el periodo (plazo de preparación incluido) más las ya asignadas: seleccione los números de serie entregados al cliente. Una unidad tomada por otra reserva se rechaza con un mensaje. Las referencias aparecen en la lista de reservas, la ficha de pedido y el webhook.

Check-out y check-in

  • Salida, en una reserva confirmada: el material se entrega al cliente, el alquiler pasa a en curso y se registra la hora de entrega.
  • Devolución, en un alquiler en curso: el material se restituye, el alquiler pasa a devuelto y se registra la hora. Las fechas se liberan tras el plazo de preparación eventual.

La ficha de reserva recoge el estado del material a la salida y a la devolución, además del importe de fianza retenida y su motivo en caso de daños, listos para el cobro Stripe o una factura de abono parcial.

Planning

Catálogo > Alquiler > Planning muestra la ocupación del mes, una fila por producto y una columna por día: celda blanca libre, amarilla parcialmente reservada con la cantidad, roja completa. Al pasar el cursor por una celda se listan las reservas (número, estado, cantidad, cliente, marcador de pack). Los días de cierre y el día actual están marcados, la navegación pasa de mes en mes, y el plazo de preparación de cada producto cuenta en la ocupación.

Estadísticas

Catálogo > Alquiler > Estadísticas analiza el periodo que elija (últimos 12 meses por defecto): por producto, número de reservas, días alquilados multiplicados por la cantidad y acotados al periodo, capacidad, tasa de ocupación, facturación de alquiler sin IVA imputada al inicio del alquiler, fianzas retenidas, con una fila de totales. Estados considerados: confirmada, en curso, devuelta.

Temporadas tarifarias

La cuadrícula de configuración acepta una temporada por línea: inicio|fin|multiplicador|etiqueta. Dos formatos de límites: fechas completas 2026-06-15|2026-09-15|1.3|Temporada alta (puntual) o mes-día 12-20|01-05|1.5|Fiestas (recurrente cada año, cambio de año gestionado). Cada día de alquiler se factura a la tarifa diaria multiplicada por el coeficiente de su temporada; fuera de temporada el coeficiente es 1; en caso de solapamiento, la última línea gana. Las tarifas planas ignoran las temporadas: es el sentido de un precio redondo.

Emails de ciclo de vida (cron)

Tres emails automáticos acompañan cada alquiler pagado: recordatorio antes del inicio, recordatorio antes de la devolución (antelación configurable, 1 = la víspera) y aviso de retraso cuando el material no se devuelve en la fecha prevista. Active el interruptor y llame una vez al día la URL cron protegida por token mostrada bajo el formulario de configuración. Cada email se envía una sola vez por reserva, en el idioma del pedido del cliente, en cinco idiomas. La llamada cron purga también las solicitudes caducadas.

Solicitud de reserva sin pago

En los productos con la opción activa, la ficha muestra un botón de solicitud: el cliente elige sus fechas, deja sus datos (identificados automáticamente si está conectado) y un mensaje, sin pasar por caja. La solicitud aparece en las reservas con el estado Solicitud pendiente: Aceptar vuelve a comprobar la disponibilidad, confirma y notifica al cliente; Rechazar libera las fechas y notifica al cliente. El bloqueo del stock se ajusta por producto y solicitud a solicitud, y un plazo de caducidad puede anular las solicitudes sin respuesta.

Packs de productos

Los packs nativos de PrestaShop están sincronizados: reservar un pack bloquea la disponibilidad de cada componente alquilable en el mismo periodo (cantidades del pack incluidas), reservar un componente solo hace el pack no disponible, y cualquier cambio en la reserva del pack se propaga a sus componentes. Las reservas de componentes están ocultas para el cliente y visibles en el back-office con una insignia Pack. Un ajuste global desactiva el mecanismo.

API REST

Active la API en la configuración: dos tokens regenerables (lectura-escritura y solo lectura), pasados vía X-Api-Key o Authorization: Bearer.

  • GET ping: autenticación y versión.
  • GET products: productos alquilables y su configuración.
  • GET availability: disponibilidad día a día, unidades restantes incluidas.
  • GET bookings: reservas, filtrables por status, id_product, from, to, updated_since, external_reference.
  • POST bookings: creación, idempotente vía external_reference.
  • POST bookings&id=N: modificación; DELETE bookings&id=N: anulación.

Webhooks salientes

Active los webhooks e indique la URL de su software: en cada evento recibe un POST JSON con la reserva completa (fechas, cantidad, precio, estado, cliente, unidades asignadas, marcas de tiempo de check-in y check-out, retención). Dos cabeceras acompañan cada llamada: X-DfRental-Event (nombre del evento) y X-DfRental-Signature (HMAC-SHA256 del cuerpo con el secreto mostrado en el panel dedicado, regenerable). Eventos emitidos: booking.requested, booking.confirmed, booking.declined, booking.cancelled, booking.active, booking.returned, más booking.created y booking.updated para la API. El envío es best effort con tiempo de espera corto: un receptor caído nunca bloquea la tienda.

Webhooks y API se complementan: los webhooks notifican en tiempo real, la API con updated_since permite recuperar el histórico tras una indisponibilidad del receptor.

Seguimiento de reservas

Catálogo > Alquiler > Reservas lista todas las reservas con producto, cliente, pedido, fechas, unidades asignadas y estado de color: solicitud pendiente, pendiente, confirmada, en curso, devuelta, rechazada, anulada. Las acciones Aceptar, Rechazar, Salida y Devolución se muestran según el estado. El detalle aparece también en el carrito, la confirmación de pedido, la ficha de pedido del back-office y la página Mis alquileres de la cuenta cliente.

FAQ y resolución de problemas

¿El precio de alquiler modifica el precio de mi producto?

No. El precio se inyecta mediante un precio específico ligado al carrito en curso, y la fianza vive en su propia línea. El precio de catálogo no cambia.

El modo semanas devuelve el domingo, quiero de lunes a lunes

Desactive Facturar el día de la devolución: una semana va entonces de lunes a lunes, 7 días facturados, con la devolución el día siguiente al periodo facturado. Ese día queda no disponible para otra salida.

El cliente no registró su huella Stripe

El enlace se propone en la página de confirmación del pedido mientras no haya tarjeta registrada. Puede reenviarlo manualmente: se construye con el identificador y la clave del pedido, visibles en la ficha de reserva. La ficha indica Huella no registrada hasta que el cliente completa el proceso.

El cobro Stripe es rechazado

El banco del cliente puede rechazar un cargo fuera de sesión (3-D Secure). El mensaje de Stripe se muestra tal cual en el back-office. La retención queda por cobrar por otro canal; la reserva conserva el importe y el motivo.

La capacidad de mi producto ya no sigue la cantidad configurada

Es el comportamiento esperado en cuanto existe una unidad para ese producto: la capacidad pasa a ser el número de unidades activas y disponibles. Elimine las unidades para volver a la cantidad configurada.

¿Una solicitud aceptada crea un pedido?

No. La aceptación confirma la reserva y bloquea las fechas, sin crear un pedido PrestaShop. Usted cobra por el canal de su elección y sigue el alquiler desde la pantalla de reservas.

Los emails de recordatorio no salen

Compruebe que el interruptor está activo y que la URL cron se llama a diario: responde en JSON con el número de envíos. Cada email se envía una sola vez por reserva, solo para reservas vinculadas a un pedido.

El calendario no aparece en la ficha de producto

Compruebe que el producto está configurado y activo en Productos en alquiler. Vacíe la caché de PrestaShop (Parámetros avanzados > Rendimiento) y, durante las pruebas, desactive la combinación de archivos (CCC).

La API devuelve 401

Compruebe que la API está activada y que el token enviado coincide con el mostrado. Tras una regeneración, actualice sus integraciones. El token de solo lectura solo se acepta en los endpoints GET.

¿Es compatible con PrestaShop 9?

Sí. El módulo es compatible con PrestaShop 8 y 9, en multitienda y multiidioma. El formato de precios usa el Locale actual, conforme a las prácticas de PrestaShop 9.

¿Te ha resultado útil esta página?

¿Sigues atascado? Contacta con soporte