Aluguer de Produtos: guia completo
Instalar, configurar e explorar o aluguer de produtos: calendário de disponibilidade, caução, tarifa decrescente ou em percentagem, pedido de reserva sem pagamento, packs e API REST, com acompanhamento das reservas para PrestaShop 8 e 9.
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
- No back-office, abra Módulos > Gestor de módulos.
- Clique em Instalar um módulo e selecione o ficheiro
dfproductrental.zip. - 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 porstatus,id_product,from,to,updated_sinceeexternal_reference, paginada porlimiteoffset.POST bookings: criação de uma reserva em estadorequestedouconfirmed, com controlo de disponibilidade (contornável porforce). O campoexternal_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.