# Aluguer de Produtos: guia completo

> Apresentação O módulo Aluguer de Produtos (dfproductrental) acrescenta um modo de aluguer ativável produto a produto na sua loja PrestaShop. Na ficha de um produto alugável, o cliente escolhe um…

- Página: <https://www.datafirefly.com/pt/documentation/dfproductrental/>
- Idioma: pt
- Atualizado em: 2026-09-03
- Outros idiomas: [fr](https://www.datafirefly.com/documentation/dfproductrental/index.md), [en](https://www.datafirefly.com/en/documentation/dfproductrental/index.md), [es](https://www.datafirefly.com/es/documentation/dfproductrental/index.md), [de](https://www.datafirefly.com/de/documentation/dfproductrental/index.md), [it](https://www.datafirefly.com/it/documentation/dfproductrental/index.md), [pl](https://www.datafirefly.com/pl/documentation/dfproductrental/index.md), [nl](https://www.datafirefly.com/nl/documentation/dfproductrental/index.md)
- Índice: <https://www.datafirefly.com/pt/documentation/llms.txt>

## Apresentação

O módulo **Aluguer de Produtos** (`dfproductrental`) acrescenta um **modo de aluguer** ativável produto a produto na sua loja PrestaShop. Na ficha de um produto alugável, o cliente escolhe um **intervalo de datas** num calendário que acinzenta automaticamente os dias já reservados, e o preço é calculado **ao dia** segundo uma **tarifa decrescente por escalões**, em montantes fixos ou em **percentagem do preço de venda**. O módulo gere uma **caução** por produto, enquadra a **duração** com um mínimo e um máximo de dias, aceita **pedidos de reserva sem pagamento**, sincroniza a disponibilidade dos **packs** e dos seus componentes, expõe uma **API REST** para os seus programas de gestão, e acompanha cada reserva a partir de um back-office dedicado, do carrinho até à devolução do artigo.

Ideal para material, mobiliário, equipamento para eventos, instrumentos, veículos ou ferramentas: qualquer artigo que se alugue em vez de se vender de uma vez por todas. O modo de aluguer ativa-se apenas nos produtos que designar, sem desvirtuar o resto do seu catálogo.

## Compatibilidade

- PrestaShop 8.0 a 9.x
- PHP 7.4 a 8.3
- Monoloja e multiloja
- 5 idiomas: FR, EN, ES, DE, IT (o português traduz-se em Internacional > Traduções; os modelos de e-mail de pedido existem nesses cinco idiomas, acrescente uma pasta `mails/pt/`)
- Tema Classic e temas personalizados
- Nenhuma dependência: sem Composer, autoloader PSR-4 manual, calendário flatpickr incorporado localmente

## Instalação

1. No back-office, abra **Módulos > Gestor de módulos**.
2. Clique em **Instalar um módulo** e selecione o ficheiro `dfproductrental.zip`.
3. Depois de instalado, clique em **Configurar**.

Na instalação, o módulo cria as suas três tabelas (`df_rental_product`, `df_rental_tier`, `df_rental_booking`), regista os seus hooks, inicializa as suas definições por defeito e acrescenta duas entradas sob o menu **Catálogo**: **Aluguer – Produtos** e **Aluguer – Reservas**. A atualização a partir de uma versão 1.2.0 ou 1.3.0 é suportada por scripts de upgrade tolerantes: instale simplesmente o novo ZIP por cima.

## Definições gerais

A página de configuração do módulo reúne as opções globais aplicadas por defeito a todos os produtos alugáveis.

- **Prazo de intervalo (dias)**: número de dias bloqueados depois de cada devolução, para preparar, limpar ou controlar o artigo antes do aluguer seguinte. Valor global, sobreposto ao nível de cada produto.
- **Horizonte de reserva (dias)**: limita até que data no futuro um cliente pode reservar (365 dias por defeito).
- **Expiração dos carrinhos pendentes (minutos)**: duração após a qual uma reserva não confirmada liberta as suas datas (60 minutos por defeito).
- **Integrar a caução na linha do carrinho**: quando está ativa, a caução é acrescentada ao preço da linha e devolvida por nota de crédito na devolução.
- **Ocultar o botão « Adicionar ao carrinho » nativo**: nos produtos em aluguer, oculta o botão de compra clássico a favor do botão de reserva.
- **Caução por defeito**: montante proposto por defeito na criação de um novo produto alugável.
- **Sincronização dos packs**: ativa ou desativa a repercussão automática das reservas de packs nos seus componentes alugáveis (ativada por defeito).
- **Expiração dos pedidos (horas)**: para lá deste prazo, um pedido de reserva sem resposta é anulado e as suas datas são libertadas (0 = nunca, valor por defeito).
- **API**: interruptor de ativação, token de leitura-escrita e token só de leitura, cada um regenerável num clique. A documentação dos endpoints aparece diretamente sob este painel.

## Configurar um produto alugável

Vá a **Catálogo > Aluguer – Produtos** e depois **Adicionar**.

- **Produto**: selecione o produto do seu catálogo a tornar alugável.
- **Ativo**: ativa ou suspende o aluguer neste produto.
- **Modo de tarifação**: montantes fixos, ou percentagem do preço de venda do produto (ver mais abaixo).
- **Preço base ao dia**: tarifa diária aplicada quando nenhum escalão corresponde à duração escolhida.
- **Caução**: montante da caução exigida para este produto.
- **Duração mínima / máxima (dias)**: enquadra o intervalo de datas que o cliente pode selecionar.
- **Unidades disponíveis**: número de exemplares que possui. Uma data só é bloqueada quando todas as unidades estão alugadas em simultâneo.
- **Prazo de intervalo**: deixe o valor global ou defina um intervalo específico para este produto.
- **Autorizar o pedido sem pagamento**: mostra um botão de pedido de reserva na ficha de produto, além ou em vez do percurso de encomenda clássico.
- **Os pedidos bloqueiam o stock**: determina se os pedidos pendentes deste produto reservam as datas enquanto não decidir.

### Escalões de tarifa decrescente

Sob o formulário, acrescente tantos escalões quantos forem necessários. Cada escalão é definido por um **dia mínimo**, um **dia máximo** e um **preço ao dia**.

O módulo aplica o escalão cujo intervalo contém a duração escolhida. Um escalão cujo **dia máximo é 0** é considerado **ilimitado**. Se nenhum escalão corresponder, aplica-se o **preço base ao dia**.

Exemplo: 39 €/dia de 1 a 3 dias, 32 €/dia de 4 a 7 dias, 26 €/dia a partir de 8 dias (dia máximo a 0).

### Modo percentagem

Em modo **percentagem**, o preço base ao dia, a caução e os escalões deixam de ser montantes em moeda e passam a ser **percentagens do preço de venda sem impostos** do produto. Um produto vendido a 1000 € com uma caução a 10 exige assim 100 € de caução; uma tarifa diária a 2 dá 20 € por dia. Os montantes seguem automaticamente os preços do seu catálogo: é a forma mais rápida de aplicar uma grelha tarifária uniforme a um grande número de produtos alugáveis.

## Utilização do lado da loja

### O calendário de disponibilidade

Na ficha de produto aparece um seletor de intervalo de datas. Os dias já reservados são automaticamente acinzentados e não selecionáveis, tal como os dias de intervalo depois de cada devolução. O cliente escolhe uma data de início e uma data de fim dentro dos limites de duração que fixou.

### O cálculo do preço

Assim que é selecionado um intervalo válido, um resumo detalha o **número de dias**, o **preço ao dia aplicado** (segundo o escalão), o **total do aluguer**, a **caução** e o **total geral**. O cliente sabe exatamente o que paga antes de adicionar ao carrinho.

### A reserva

O botão **Reservar estas datas** adiciona o aluguer ao carrinho. O preço de aluguer é injetado através de um **desconto específico ligado ao carrinho**: o preço de origem do produto fica intacto no catálogo e para todas as outras vendas. É criada uma reserva no estado **pendente** que bloqueia as datas escolhidas.

Se a encomenda não for validada dentro do prazo de expiração configurado, o carrinho expira e as datas são automaticamente libertadas para os outros clientes. Na validação da encomenda, a reserva passa a **confirmada** e associa-se ao cliente e à encomenda.

## Pedido de reserva sem pagamento

Nos produtos em que a opção **Autorizar o pedido sem pagamento** está ativa, a ficha de produto mostra um botão **Pedir uma reserva**. O cliente escolhe as suas datas e a sua quantidade como numa reserva clássica, e preenche depois os seus contactos: os clientes autenticados são identificados automaticamente, os visitantes introduzem o seu nome, o seu e-mail e, se quiserem, o seu telefone. Um campo de mensagem livre acompanha o pedido.

O pedido aparece em **Catálogo > Aluguer – Reservas** com o estado **Pedido pendente**. Estão disponíveis duas ações em cada linha:

- **Aceitar**: o módulo volta a verificar a disponibilidade do período (pedidos concorrentes incluídos) e passa a reserva a **confirmada**. O cliente recebe um e-mail de aceitação.
- **Recusar**: a reserva passa a **recusada**, as suas datas são libertadas e o cliente recebe um e-mail de recusa.

Três e-mails automáticos acompanham o percurso: um aviso de receção ao cliente no momento do pedido, uma notificação ao comerciante com os contactos e a mensagem do cliente, e depois o e-mail de decisão. Os modelos existem nos cinco idiomas do módulo e personalizam-se como qualquer e-mail PrestaShop.

O bloqueio do stock pelos pedidos regula-se com precisão: um valor por defeito por produto (**Os pedidos bloqueiam o stock**) e um interruptor individual em cada pedido na lista das reservas. Um pedido que não bloqueia o stock deixa as datas reserváveis por outros clientes enquanto não for aceite. Um prazo de expiração configurável (em horas) pode anular automaticamente os pedidos sem resposta e libertar as suas datas.

## Packs de produtos

O módulo suporta os **packs nativos do PrestaShop**. Quando um pack contém componentes eles próprios configurados como alugáveis, a reserva do pack cria automaticamente reservas ligadas em cada um dos seus componentes, tendo em conta as quantidades do pack. Concretamente:

- Reservar um **pack** bloqueia a disponibilidade de cada um dos seus componentes alugáveis no mesmo período.
- Reservar um **componente** sozinho torna o pack indisponível nessas datas assim que já não restam unidades suficientes.
- Qualquer modificação da reserva do pack (datas, quantidade, estado, anulação) é **repercutida automaticamente** nas reservas dos seus componentes.

As reservas de componentes são ocultadas do lado do cliente (o cliente só vê o seu pack) mas visíveis no back-office com um badge **Pack #N** que aponta para a reserva-mãe. Não são modificáveis diretamente: é a reserva do pack que faz fé. Uma definição global permite desativar toda a mecânica se preferir gerir os packs como produtos independentes.

## API REST

A API expõe o aluguer em **JSON** para os seus programas de gestão de parque, de planeamento ou de faturação. Ative-a na configuração do módulo: são gerados dois **tokens**, regeneráveis num clique: um token de leitura-escrita e um token só de leitura, aceite unicamente nos endpoints GET. Cada pedido deve apresentar um destes tokens através do cabeçalho `X-Api-Key` ou `Authorization: Bearer`.

### Endpoints

- `GET ping`: verificação da autenticação e da versão.
- `GET products`: lista dos produtos alugáveis com a sua configuração (preço, caução, escalões, unidades, modo de tarifação).
- `GET availability`: disponibilidades dia a dia de um produto entre duas datas, unidades restantes incluídas.
- `GET bookings`: lista das reservas, filtrável por `status`, `id_product`, `from`, `to`, `updated_since` e `external_reference`, paginada por `limit` e `offset`.
- `POST bookings`: criação de uma reserva em estado `requested` ou `confirmed`, com controlo de disponibilidade (contornável por `force`). O campo `external_reference` (64 caracteres no máximo) torna a criação idempotente: se uma reserva já tiver essa referência, é atualizada em vez de ser duplicada.
- `POST bookings&id=N`: modificação de uma reserva (datas, quantidade, estado), repercutida nos componentes de pack.
- `DELETE bookings&id=N`: anulação de uma reserva.

O filtro `updated_since` permite uma **sincronização incremental**: o seu programa memoriza a data da última passagem e só recupera as reservas modificadas desde então. A API não envia webhooks de saída: a sincronização faz-se por interrogação periódica. Os URL exatos e exemplos de pedidos são apresentados na página de configuração do módulo.

## Acompanhamento das reservas

Em **Catálogo > Aluguer – Reservas**, encontra todas as reservas com o seu produto, o seu cliente, a sua encomenda, as suas datas e o seu estado, identificado por um badge de cor.

- **Pedido pendente**: pedido sem pagamento à espera da sua decisão.
- **Pendente**: adicionada ao carrinho, à espera da validação da encomenda.
- **Confirmada**: encomenda validada ou pedido aceite, datas reservadas.
- **Em curso**: período de aluguer em curso.
- **Devolvida**: artigo devolvido.
- **Recusada**: pedido recusado, datas libertadas.
- **Anulada**: reserva anulada, datas libertadas.

O detalhe de cada aluguer aparece igualmente no carrinho, na página de confirmação de encomenda e na ficha de encomenda do back-office. Do lado do cliente, a página **Os meus alugueres** da área Minha conta lista todos os seus alugueres com o período, a duração, a caução e o estado.

A devolução da caução é feita por **nota de crédito** na devolução do artigo, a partir da ficha de encomenda do PrestaShop. É o método mais simples e mais transparente para a contabilidade da maioria das lojas de aluguer.

## Opções da versão 1.5

A versão 1.5 alarga a seleção das datas, a tarifação e a gestão da caução. Todas as opções se regulam na configuração do módulo.

### Seleção das datas

Dois modos de apresentação: um campo de período único com calendário de dois meses, ou dois campos separados de início e fim. As horas de levantamento e de devolução podem ser ativadas; são registadas na reserva e expostas na API. A localização do bloco de aluguer na ficha de produto é configurável entre sete hooks, com um hook de recurso para os temas sem displayProductAdditionalInfo.

### Datas globais no carrinho

Ativadas por defeito, aplicam um único período a todas as linhas da encomenda. As fichas de produto chegam pré-preenchidas com o período do carrinho, e o carrinho propõe um editor para mudar as datas de toda a encomenda, com nova verificação das disponibilidades e recálculo dos preços de cada linha. Uma opção desloca inteiramente a escolha das datas para o carrinho: a ficha de produto só pede a quantidade, e o primeiro período disponível é proposto automaticamente na primeira adição.

### Todo o catálogo em aluguer

Para as lojas 100 % de aluguer: cada produto ativo torna-se alugável sem configuração individual. O montante base é retirado do preço de venda, o stock de aluguer segue o stock PrestaShop, e o pedido de reserva pode ser autorizado globalmente.

### Coeficientes de duração

Em modo coeficiente, o preço calcula-se como montante base multiplicado por um coeficiente. A grelha por escalões de dias é configurável (por defeito 1 dia: 1, 2 dias: 1,5, 3 dias: 2, 4 a 7 dias: 3, 8 a 14 dias: 5, 15 a 21 dias: 7, 22 a 30 dias: 9). Duas exceções de fim de semana prioritárias são reguláveis: sábado a segunda-feira (coeficiente 1 por defeito) e sexta-feira a segunda-feira (1,5 por defeito). Para lá da duração máxima (30 dias por defeito), o preço passa a tarifa sob consulta: a adição ao carrinho é bloqueada e o pedido de reserva sem pagamento assume o lugar.

### Caução

Três modos: por produto (comportamento histórico), global automática ou desativada. Em modo global, é calculada uma única caução para toda a encomenda: montante base com IVA multiplicado por um multiplicador (2 por defeito), com um mínimo (500 por defeito) e um arredondamento ao escalão superior (100 por defeito). É registada na primeira reserva da encomenda e continua modificável no back-office. A faturação é independente: caução faturada no pagamento, ou simplesmente apresentada para uma pré-autorização bancária. As colunas de caução desaparecem dos resumos e da fatura PDF quando nenhuma linha a comporta.

## FAQ e resolução de problemas

### O preço de aluguer modifica o preço do meu produto?

Não. O preço é injetado através de um desconto específico ligado unicamente ao carrinho em curso. O preço de origem do produto fica inalterado no catálogo e para os outros clientes.

### Como funciona a tarifa decrescente?

Define escalões (dia mínimo, dia máximo, preço ao dia). O módulo escolhe o escalão cujo intervalo contém a duração pedida. Um dia máximo a 0 significa « ilimitado ». Sem escalão correspondente, aplica-se o preço base ao dia.

### É possível alugar várias unidades do mesmo produto?

Sim. Preencha o número de unidades disponíveis. Uma data só é acinzentada quando todas as unidades já estão alugadas nesse período.

### A caução é devolvida automaticamente?

Não. É acrescentada à linha do carrinho no momento do aluguer e devolvida por nota de crédito na devolução, a partir da ficha de encomenda do back-office.

### Um pedido aceite cria uma encomenda?

Não. A aceitação confirma a reserva e bloqueia as datas, sem criar uma encomenda PrestaShop. Cobra o pagamento pelo canal da sua escolha (no local, transferência, ligação de pagamento) e acompanha o aluguer a partir do ecrã das reservas.

### O calendário não aparece na ficha de produto

Verifique que o produto está configurado e ativo em **Aluguer – Produtos**. Limpe depois a cache do PrestaShop (Parâmetros avançados > Desempenho) e, durante os seus testes, desative a combinação/compressão dos ficheiros (CCC).

### O botão « Adicionar ao carrinho » nativo continua visível

A ocultação assenta em seletores de tema. Ative a opção **Ocultar o botão « Adicionar ao carrinho » nativo** nas definições; consoante o seu tema, pode ser necessário um ligeiro ajuste dos seletores.

### A API devolve 401

Verifique que a API está ativada na configuração e que o token transmitido corresponde ao token apresentado. Depois de uma regeneração do token, lembre-se de atualizar as suas integrações.

### É compatível com o PrestaShop 9?

Sim. O módulo é compatível com PrestaShop 8 e 9, em multiloja e multilingue (FR, EN, ES, DE, IT). A formatação dos preços usa a Locale atual, em conformidade com as práticas do PrestaShop 9.
