Recogida en tienda (Store Pickup) — Guía completa
Instale, configure y gestione la recogida en tienda: transportista dedicado, selección del punto de recogida en un mapa interactivo (Leaflet/OpenStreetMap, sin clave API), gestión de tiendas y seguimiento del pedido para PrestaShop 8 y 9.
Presentación
El módulo Recogida en tienda (datafireflystorepickup) permite a sus clientes recoger su pedido en uno de sus puntos de venta en lugar de recibirlo por mensajería. Durante la instalación se crea automáticamente un transportista «Recogida en tienda». En el checkout, cuando el cliente elige este transportista, aparecen una lista de tiendas y un mapa interactivo: selecciona su punto de recogida y esa elección se guarda con el pedido.
El mapa se basa en Leaflet y OpenStreetMap, sin necesidad de clave API. El módulo es compatible con PrestaShop 8.x y 9.x y se apoya exclusivamente en los hooks nativos, sin sobrescribir el núcleo.
Instalación
- Comprima la carpeta
datafireflystorepickup(el archivo debe contener la carpeta en sí, no solo su contenido). - En el back office, abra Módulos > Gestor de módulos, haga clic en Subir un módulo y suelte el archivo ZIP.
- Una vez finalizada la instalación, haga clic en Configurar.
Durante la instalación, el módulo realiza automáticamente lo siguiente: crea el transportista «Recogida en tienda» (con sus rangos de precio y peso, todas las zonas y todos los grupos de clientes), crea las tablas de datos, registra los hooks e inicializa los gastos de recogida a 0.
El transportista se identifica por su referencia (id_reference) y no solo por su identificador: puede editarlo libremente en Transporte > Transportistas (nombre, plazo, logotipo, zonas) sin romper el enlace con el módulo.
Configuración
Vaya a Módulos > Recogida en tienda > Configurar. La página reúne los ajustes generales y la gestión de tiendas.
Gastos de recogida
El campo Gastos de recogida (sin IVA) define el coste aplicado al transportista de recogida. Deje 0 para una recogida gratuita o introduzca un importe sin impuestos. Esta tarifa se aplica independientemente de la tienda elegida.
Gestión de tiendas
La lista de tiendas muestra todos sus puntos de recogida con su nombre, dirección, código postal, ciudad, teléfono y estado. Desde esta lista puede añadir, editar, activar/desactivar o eliminar una tienda.
Cada tienda tiene los siguientes campos:
- Nombre (obligatorio) — etiqueta que se muestra al cliente.
- Dirección (obligatorio) y Código postal.
- Ciudad (obligatorio).
- Teléfono.
- Horario — campo de texto libre, p. ej. «Lun-Sáb 9h-19h».
- Latitud y Longitud (obligatorios) — la posición de la tienda en el mapa.
- Activo — solo las tiendas activas se ofrecen en el checkout.
No es necesario buscar las coordenadas manualmente: haga clic en el mapa que aparece debajo del formulario para colocar el punto, o utilice la geocodificación de la dirección. La latitud y la longitud se rellenan automáticamente. La geocodificación se basa en Nominatim / OpenStreetMap.
Lado del cliente (checkout)
En el paso de entrega, cuando el cliente selecciona el transportista «Recogida en tienda», el módulo muestra debajo del transportista la lista de tiendas activas junto con un mapa interactivo donde cada tienda se representa con un marcador. El cliente elige su punto de recogida en la lista o directamente en el mapa.
La selección es obligatoria: hasta que no se elige una tienda, el paso de entrega no puede validarse y un mensaje invita al cliente a seleccionar su tienda. La elección se guarda en tiempo real (mediante una petición AJAX) y se vincula al carrito.
Si no hay ninguna tienda activa disponible, se muestra un mensaje de advertencia en lugar del mapa.
Seguimiento del pedido
Una vez confirmado el pedido, la tienda elegida se guarda como una instantánea vinculada al pedido (nombre, dirección, código postal, ciudad, teléfono y horario en el momento de la compra). Así permanece consultable incluso si la tienda se edita o elimina posteriormente. El punto de recogida se muestra automáticamente:
- en la página de confirmación del pedido;
- en el detalle del pedido de la cuenta del cliente;
- en la ficha de pedido del back office, en la columna lateral.
Estructura técnica
Esta sección está dirigida a integradores y desarrolladores que deseen comprender el funcionamiento interno del módulo.
Tipo de módulo
La clase principal DataFireflyStorePickup extiende CarrierModule. La tarifa del transportista la devuelven getOrderShippingCost() y getOrderShippingCostExternal(), ambas basadas en la configuración DATAFIREFLY_PICKUP_FEE.
Hooks utilizados
actionFrontControllerSetMedia— carga Leaflet (CSS/JS remotos) y los assets front del módulo en la página de pedido.displayCarrierExtraContent— inyecta la lista y el mapa debajo del transportista de recogida.actionCarrierUpdate— actualiza el identificador del transportista cuando se edita en el back office.actionValidateStepComplete— hace obligatoria la selección de tienda en el paso de entrega.actionValidateOrder— congela la tienda elegida en el pedido.displayOrderConfirmationydisplayOrderDetail— muestran el punto de recogida en el lado del cliente.displayAdminOrderSide— muestra el punto de recogida en la ficha de pedido del back office.
Reconocimiento del transportista
El método isPickupCarrier() identifica el transportista de recogida por su referencia (id_reference) además de por su identificador actual, porque el ID de un transportista de PrestaShop cambia cada vez que se edita en el back office. Se almacenan dos claves de configuración para ello: DATAFIREFLY_PICKUP_CARRIER_ID y DATAFIREFLY_PICKUP_CARRIER_REF.
Tablas de datos
datafirefly_pickup_store— las tiendas (nombre, dirección, coordenadas, horario, estado). Gestionada por elObjectModelDataFireflyPickupStore.datafirefly_pickup_selection— la tienda elegida por carrito (claveid_cart), antes de validar el pedido.datafirefly_pickup_order— la instantánea de la tienda por pedido (claveid_order), conservada tras la compra.
Selección AJAX
El controlador front ajax (acción selectStore) guarda la tienda seleccionada en datafirefly_pickup_selection para el carrito actual. Al validar el pedido, esta selección se copia en datafirefly_pickup_order y después se elimina la fila del carrito.
Desinstalación
La desinstalación del módulo marca el transportista como eliminado y desactivado, retira las claves de configuración (DATAFIREFLY_PICKUP_CARRIER_ID, DATAFIREFLY_PICKUP_CARRIER_REF, DATAFIREFLY_PICKUP_FEE) y elimina las tres tablas del módulo. Las tiendas guardadas se borran, por tanto.
Limitaciones conocidas
- El punto de recogida no se inyecta en los correos de confirmación: permanece visible en el back office y en la cuenta del cliente.
- La geocodificación se basa en Nominatim (OpenStreetMap) — se recomienda un uso moderado para respetar las condiciones de uso del servicio.
FAQ
¿Se necesita una clave API para el mapa?
No. El mapa utiliza Leaflet y las teselas de OpenStreetMap, sin clave API ni configuración externa.
¿Puede el cliente validar su pedido sin elegir una tienda?
No. Cuando se selecciona el transportista de recogida, elegir una tienda es obligatorio para pasar el paso de entrega.
¿Qué ocurre con el punto de recogida si elimino una tienda tras un pedido?
El pedido conserva una instantánea de la tienda (nombre, dirección, horario…) guardada en el momento de la compra. Sigue siendo consultable incluso tras eliminar la tienda.
¿Es el módulo compatible con PrestaShop 9?
Sí, el módulo es compatible con PrestaShop 8.x y 9.x.