Wine and spirits on PrestaShop: DataFirefly Wine & Spirits documentation
Installation, wine profile, filters, countries and legal notices, excise rates and register, sale by the case, mixed case, age popup, CSV and troubleshooting.
Installation
Install the module from Modules > Module Manager > Upload a module with the ZIP file. The module creates its tables, registers its hooks and adds the Catalog > Wine & Spirits menu.
On install, it also creates eight native features: Vintage, Grape variety, Appellation, Alcohol content, Color, Region, Country of origin and Certification. It prefills France (legal age 18, age checkbox at checkout, the French mandatory health warning) and the French 2026 excise rates.
To upgrade from an earlier version, install the new ZIP: the upgrade scripts add the missing columns, tables and features without touching your data.
Dashboard
First tab of the menu. It shows the number of managed products, the units sold, the pure alcohol and the excise duties of the current month, a configuration checklist, data completeness (ABV, color, vintage, grapes, appellation) and the last 30 products to complete with a link to their page. Color, vintage and grapes are only checked for wines.
Settings
Excise calculation mode
- Included in the price (default): your prices already contain excise duties. The amount is shown on the product page (“Including excise duties”) and in the cart, then recorded in the register.
- Added at checkout: an “Excise duties” line is added to the cart with the duties of the delivery country. It is carried by a technical product hidden from the catalog, created when this mode is enabled. Do not delete this product.
- Disabled: no amount is calculated, the register only records volumes and pure alcohol.
Tax rule of the excise line: in the EU, excise duties are part of the VAT base. Select your standard rate.
Display
Each element is enabled separately: wine summary on the product page, excise amount on the product page, legal notice on the product page, notice and excise total in the cart, notice in the footer, excise and notice on PDF invoices, Tasting sheet tab, badges in product listings.
Age verification popup
- Verification: Yes / No buttons, or date of birth with age calculation.
- Remember for: number of days during which the visitor is not asked again. 0 asks again at every browser session.
- Exit URL: page opened when the visitor answers no or is under age.
- Button color, title and text per language. In the text,
{age}is replaced by the legal age of the visitor country.
The popup is not shown to search engine robots, on CMS pages, or to logged-in customers whose date of birth proves their age. The page content stays in the HTML.
Mixed case
Set the number of bottles required (6 by default), the discount percentage and the eligible products: all alcoholic products managed by the module, or only those marked in their tab. As soon as the cart reaches the required number, every eligible bottle gets the discount. A product whose own case discount already applies keeps its discount.
Countries without a specific rule
Values used for the countries you have not configured: alcohol delivery allowed or not, age checkbox at checkout, legal age.
Product defaults
Volume (75 cl) and case size (6) suggested for a new product.
Filterable features
The table shows the status of the eight features. Recreate missing features recreates any feature that was deleted. For customers to filter on them, add them to your filter template in ps_facetedsearch (button Open layered navigation settings).
Filling in a product
Open the product page, Modules tab, Wine & Spirits block. Tick This product is an alcoholic beverage. The block is saved with its own button, independently of the product form.
Wine and spirits data
- Category: excise category used for duties (still wine, sparkling wine, fortified wine, other intermediate product, spirits, beer, cider).
- Vintage or the Non-vintage checkbox.
- Alcohol content in % vol and volume per unit in cl.
- Grape varieties separated by commas: each becomes a filter value. Appellation with suggestions from existing values to avoid duplicates.
Profile and tasting
Color, region, country of origin, serving temperature (min and max), aging potential, certifications (organic, biodynamic, natural wine, vegan, HVE), awards and ratings (one per line). Tasting notes and food pairing are entered per language with the language tabs.
Sale by the case
- By the unit only: standard behavior.
- By the unit or by the case: the product page offers a choice between bottle and case, with the case price and the saving.
- By the case only: the minimum quantity becomes the case size and cart quantities are rounded up to the next full case (down if stock is short).
The case discount, as a percentage or an amount per case, is created as a native quantity discount from one full case. The Eligible for the mixed case checkbox appears when the mixed case is enabled.
Volume by combination
For a product with combinations (half bottle, bottle, magnum), enter the volume of each combination. Left empty, the combination uses the product volume. Excise duties, the pure alcohol in the register and the tasting sheet follow the combination.
On save, the module rewrites the eight features of the product. Do not edit them manually in the Features tab: your changes would be replaced the next time the block is saved.
Countries and legal notices
The tab lists the active countries, with a search field. For each country, Edit lets you set:
- Alcohol can be delivered to this country: unticked, a customer with alcohol in the cart is stopped at the delivery step with a message, and a warning is shown on the product page.
- Legal age checkbox at checkout and legal age: the “I confirm that I am at least N years old” checkbox is added to the conditions to accept at the payment step.
- Legal notice per language. An empty language falls back to the default shop language.
The delivery country is read from the cart delivery address, otherwise from the first address of the logged-in customer, then from the visitor country, then from the shop default country.
Excise rates
A rate is defined by country, category, alcohol content range (bounds included, 0 as maximum for no limit), calculation basis and amount in the default currency, tax excluded. Several rates can apply to the same product and add up.
- per hectolitre of product: wines, sparkling wines, intermediate products, ciders.
- per hectolitre of pure alcohol: spirits. Example: 70 cl at 40% = 0.0028 hl of pure alcohol.
- per hectolitre and per degree: beers.
- per litre of product and per unit sold for other cases.
French 2026 rates shipped: still wines €4.19/hl, sparkling €10.38/hl, ciders €1.46/hl, VDN and VDL €52.39/hl, other intermediate products €209.53/hl plus €52.39/hl contribution above 18% vol, spirits €1,932.42/hl of pure alcohol plus €620.47 social security contribution above 18% vol, beers €4.12/hl/degree up to 2.8% vol then €8.24. A 70 cl bottle at 40% therefore carries €7.15.
Rates change every 1 January. Check them with the customs authority and update them. Load the French 2026 rates replaces all French rates with those shipped with the module.
Excise register
Each validated order records, for every alcoholic product, the delivery country, the category, the combination, the units, the volume, the ABV, the pure alcohol and the excise amount at the rate of the day. The Register tab filters by period, by country and on validated orders, with two CSV exports: the summary by country and category, and the order lines. Each order page also shows an Excise duties panel.
CSV import and export
Export alcoholic products or Export the whole catalog produces a file in the import format. Fill it in with a spreadsheet and import it back.
- Separator
;or,detected automatically. Product found byid_product, otherwise byreference. - A missing column or an empty cell keeps the current value.
-clears vintage, grapes, appellation and text fields. vintage: year orNV.product_type: still_wine, sparkling_wine, vdn_vdl, intermediate, spirits, beer, cider.sale_mode: unit, both, case_only.color: red, white, rose, orange, amber, clear.labels: organic, biodynamic, natural, vegan, hve, comma separated.origin_country: ISO code (FR, IT…).awards: one award per value, separated by|.- Columns per language:
tasting_notes_en,food_pairing_en,tasting_notes_fr…
Keep Simulation only ticked for a first pass: the report shows the lines read, the products that would be updated and the errors with their line number, without saving anything.
What the customer sees
- Product page: wine summary, bottle or case choice, mixed case offer, excise amount, legal age and legal notice, warning if the delivery country is blocked.
- Tasting sheet tab: feature cards, certifications, tasting notes, food pairing and awards.
- Product listings: color, vintage, certification, award and mixed case badges.
- Cart: “2 x case of 6” under the lines, mixed case progress, excise total and legal notice.
- Checkout: legal age checkbox, excise line in added mode.
- PDF invoice: excise amount, pure alcohol and legal notice.
Troubleshooting
The filters do not appear
Add the features to the ps_facetedsearch filter template and assign the template to the relevant categories. Values only appear once at least one product has been saved with its data.
The Tasting sheet tab or the badges are not displayed
Check the display options and that the product is ticked as an alcoholic beverage. The badges use the displayProductListReviews hook and the tab uses displayProductExtraContent: a theme that does not call them will not display them.
The excise line does not appear in the cart
Check the Added at checkout mode, that the delivery country has rates for the product category, and that the technical product of the excise line exists (its ID is shown in the settings).
The age popup comes back on every page
The browser blocks the dfws_age_ok cookie. Make sure a cookie manager does not delete it: it is a functional cookie.
Compatibility
- PrestaShop 8.0 to 9.x, the same ZIP covers both branches.
- Filters through native features, compatible with ps_facetedsearch.
- ModuleAdminController architecture, no Composer dependency, PHP 7.2 or later.
- Interface in French, English, Spanish, German, Italian, Dutch, Polish and Portuguese.