A discount is a price reduction that Solidres applies on its own when a booking meets the conditions you set: a long enough stay, an early enough booking, a quiet week. The guest does not enter a code. They search their dates and see the reduced price.
This guide covers installing the plugin, every field of the discount form, how the amount is calculated, and a set of ready-made discounts for hotels, apartments and guest houses that you can copy into your own site.
PREREQUISITES:
- Joomla 6.x, PHP 8.3+
- Solidres 4.0 or later
- A paid Solidres subscription, at any level. It carries the Discount download
- The Experience plugin, only if you want to give discounts on experiences. Discounts on rooms work without it
On this page:
- Discount, coupon or rate plan?
- Installation
- Creating a discount
- How a discount is calculated
- Discount examples for hotels and rentals
- Combining discounts
- Discounts in the partner dashboard
- Discounts for experiences
- Checking that it works
- Troubleshooting
Discount, coupon or rate plan?
Solidres has three ways to lower a price. They can be used together, and each has its own job:
| Discount | Coupon | Rate plan | |
|---|---|---|---|
| How the guest gets it | Automatically, when the booking meets the conditions | By entering a code | By choosing the rate |
| Good for | Rules that reward behaviour: stay longer, book earlier, fill a quiet period | Offers for a chosen audience: newsletter readers, returning guests, a partner | The price itself: seasons, weekends, occupancy, non-refundable rates |
| Where it is managed | Reservations → Discounts | Coupons & Extras → Coupons | The room type |
When a coupon and a discount apply to the same booking, the coupon lowers the nightly rates first and the discount is calculated on the result.
Installation
- Download Solidres Discount from your Download page on solidres.com.
- In your Joomla administrator, go to System → Install → Extensions and upload the package.
The plugin is enabled for you on a first install. If it has been disabled since, enable Solidres - Discount plugin under System → Plugins.
Creating a discount
Discounts are managed under Solidres → Reservations → Discounts. The list shows each discount with its property, its validity period, its priority and whether it stops further processing.
Select New to create one.
| Field | What it does |
|---|---|
| Title | The name of the discount. It is shown next to the amount in the reservation details, so name it the way you would on a bill: Weekly stay -10%. |
| Description | Optional notes about the discount. |
| State | Only a published discount is used. |
| Property | The property the discount belongs to. A discount always belongs to one property. To run the same offer in two properties, create it twice. |
| Applied to | The room types that get the discount. Choose the property first: the list then shows its room types. Several can be selected. |
| Discount type | The condition the booking has to meet. See Discount types. |
| Valid from, Valid to | The period in which the stay has to take place. See The validity period. |
| Applied type, Applied days | Limits the discount to certain days of the week. See Days of the week. |
| From, To | The lower and upper limit of the condition. The unit follows the discount type and is shown next to the field: nights, rooms, days or %. Both limits are included, and both are required. For a condition with no upper limit, enter a number you will never reach, such as 365. |
| Value | The size of the discount: a percentage or an amount. For the two free-stay types, the number of nights given away. |
| Is percent? | Yes reads the value as a percentage, No as a fixed amount in the property's currency. Not shown for the two free-stay types. |
| Priority | The order in which discounts are processed when several apply. 1 is the highest and is processed first. |
| Stop further processing | When this discount applies and the option is Yes, the discounts that come after it are skipped. The default is Yes. See Combining discounts. |
Discount types
| Discount type | From and To are counted in | The discount applies when |
|---|---|---|
| On the length of stay (night or day) | Nights | The length of the stay is between From and To. |
| On number of booked rooms | Rooms | The number of rooms in the booking, over all room types, is between From and To. |
| On number of days booked in advance | Days | The number of days between today and the arrival date is between From and To. A booking for tonight counts as 0. |
| On room type availability | % | The share of the room type's rooms that are still free for the requested dates is between From and To. With 10 rooms of which 8 are free, the availability is 80%. |
| Free X cheapest stay (night/day) | Nights | The length of the stay is between From and To. The cheapest nights of the stay are free, as many as entered in Value. |
| Free X last stay (night/day) | Nights | The length of the stay is between From and To, and longer than Value. The last nights of the stay are free, as many as entered in Value. |
NOTE Properties that are booked per day rather than per night count days in the same fields. Everywhere this guide says night, read day.
The validity period
Valid from and Valid to describe when the guest stays, not when they book. A discount is used only if the whole stay falls inside the period, the day of departure included:
| Stay | Discount | Why |
|---|---|---|
| 10 July to 17 July | Yes | Arrival and departure are both inside the period |
| 27 August to 31 August | Yes | The departure is on the last valid day |
| 29 August to 2 September | No | The departure is after the period |
| 30 May to 4 June | No | The arrival is before the period |
To give a discount all year round, set a period of several years. To limit when the booking is made, use the type On number of days booked in advance, or publish the discount for the duration of the campaign and unpublish it afterwards.
Days of the week
Applied days is required. For a discount that does not depend on the day of the week, select all seven days.
| Applied type | The discount applies when |
|---|---|
| Arrival days | The day of arrival is one of the selected days. The other days of the stay do not matter. |
| Staying days | Every day of the stay is one of the selected days, from the day of arrival to the day of departure, both included. |
IMPORTANT With Staying days, the day of departure counts. For a discount on the nights from Sunday to Thursday, select Sunday to Friday: Friday is the day the guest of Thursday night leaves. A stay that includes Friday night ends on Saturday, which is not selected, so it gets no discount.
How a discount is calculated
- On the room price only. Extras are not discounted.
- Per room. Each room of a booking is checked and discounted on its own. A percentage gives the same result either way, but a fixed amount is given for every room: a fixed discount of 20 on a booking of three rooms takes off 60.
- Except the type On number of booked rooms, which looks at the booking as a whole. It is calculated once, on the room total of the booking, it ignores Applied to, and a fixed amount is given once.
- A free night is worth its own price. When nightly prices differ, Free X cheapest stay gives away the cheapest nights and Free X last stay the last ones, whatever they cost.
Before or after tax
Open the Solidres options and select the Reservation tab. The option Discount pre tax decides what a discount is taken from:
| Discount pre tax | What happens |
|---|---|
| No (default) | The discount is calculated on the room price including tax, and taken off after the tax. |
| Yes | The discount is calculated on the room price before tax, and the tax is then calculated on the discounted price. |
The option is site-wide. Ask your accountant which one your tax rules expect, and set it before you publish your first discount: a reservation keeps the setting it was made with.
What the guest sees
When a guest searches their dates, each rate shows the discounted price, and the price breakdown lists the Room discounted amount and the Room cost after discounted. The booking summary, the confirmation email and the invoice carry a Total discount line.
When staff create or amend a reservation in the administrator, the total discount is filled in by the same rules and can be changed by hand.
Discount examples for hotels and rentals
Each example below is a complete discount. Find the one closest to what you want, copy the values, and change the numbers.
| You want to | Use the discount type | Example |
|---|---|---|
| Get longer stays | On the length of stay | Weekly and monthly stays |
| Get bookings in early | On number of days booked in advance | Early bird |
| Sell the rooms still empty this week | On number of days booked in advance | Last minute |
| Offer "stay 4, pay 3" | Free X cheapest stay, Free X last stay | Free night |
| Fill the nights from Sunday to Thursday | On the length of stay, with Staying days | Midweek special |
| Turn a weekend into a long weekend | On the length of stay, with Arrival days | Long weekend |
| Lower the price while most rooms are empty | On room type availability | Quiet dates |
| Win families and small groups | On number of booked rooms | Several rooms |
| Run a sale for a season | On the length of stay, with a validity period | Low season sale |
| Take a fixed amount off | Any, with Is percent? set to No | Fixed amount |
Values used in every example
The examples list only the fields that make the offer. Unless an example says otherwise, the other fields are:
| Field | Value |
|---|---|
| State | Published |
| Property, Applied to | Your property, and the room types on offer |
| Valid from, Valid to | Today, and a date several years ahead |
| Applied type, Applied days | Arrival days, with all seven days selected |
| Is percent? | Yes |
| Priority | 1 |
| Stop further processing | Yes |
Weekly and monthly stays
A longer stay means fewer arrivals, fewer changeovers and less cleaning. Holiday apartments, aparthotels and guest houses share that saving with the guest. Create one discount per tier, with ranges that do not overlap, so that a stay matches one tier only:
| Title | Discount type | From | To | Value |
|---|---|---|---|---|
| Weekly stay -10% | On the length of stay | 7 | 13 | 10 |
| Two weeks and more -15% | On the length of stay | 14 | 27 | 15 |
| Monthly stay -25% | On the length of stay | 28 | 365 | 25 |
Result: 7 nights at €120 come to €840. The guest gets €84 off and pays €756.
Early bird
Bookings made months ahead give you a base of occupancy to plan around, and money in the bank if you take a deposit. Resorts and seasonal properties use it to fill the high season early.
| Field | Value |
|---|---|
| Title | Early bird -15% |
| Discount type | On number of days booked in advance |
| From | 60 |
| To | 365 |
| Value | 15 |
Result: a guest who books on 1 March for an arrival on 10 July books 131 days ahead. 5 nights at €150 come to €750, the guest gets €112.50 off and pays €637.50. A guest who books the same stay on 1 June books 39 days ahead and pays the full price.
TIP An early-bird price is usually sold with stricter conditions, such as no free cancellation. Say so in your booking conditions.
Last minute
A room that is empty tonight earns nothing. A last-minute discount sells what is left for the coming days.
| Field | Value |
|---|---|
| Title | Last minute -20% |
| Discount type | On number of days booked in advance |
| From | 0 |
| To | 3 |
| Value | 20 |
Result: a booking made today for an arrival today, tomorrow, or up to three days from now gets 20% off.
TIP Guests learn quickly. If last-minute prices are always lower, they stop booking early. Limit the offer to the room types that are hard to sell, to the low season through the validity period, or use Quiet dates, which stops by itself when the rooms fill up.
Free night: stay 4, pay 3
A free night reads better than a percentage, and it rewards exactly the longer stay you are after. There are two types, and they differ when your nightly prices differ:
| Title | Discount type | From | To | Value |
|---|---|---|---|---|
| Stay 4, pay 3 | Free X cheapest stay | 4 | 6 | 1 |
| Stay 7, pay 5 | Free X cheapest stay | 7 | 13 | 2 |
| Fourth night free | Free X last stay | 4 | 4 | 1 |
Result: a guest arrives on Wednesday for 4 nights. Wednesday and Thursday cost €100 each, Friday and Saturday €140 each, €480 in total.
- With Stay 4, pay 3, the cheapest night is free: €100 off, the guest pays €380.
- With Fourth night free, the last night is free. That is Saturday: €140 off, the guest pays €340.
Use Free X cheapest stay when you want to know the most a free night can cost you. Use Free X last stay when the offer is worded as "the last night is on us".
IMPORTANT Keep From higher than Value. A free-night discount needs more nights in the stay than it gives away.
Midweek special
City hotels that live from weekend leisure guests, and country hotels that live from the weekend, have the same empty nights from Sunday to Thursday. This discount applies only to stays that stay clear of Friday and Saturday night.
| Field | Value |
|---|---|
| Title | Midweek special -15% |
| Discount type | On the length of stay |
| Applied type | Staying days |
| Applied days | SUN, MON, TUE, WED, THU, FRI |
| From | 2 |
| To | 5 |
| Value | 15 |
Result: Monday to Thursday, 3 nights: discount. Tuesday to Friday, 3 nights: discount, the guest leaves on Friday morning. Thursday to Saturday: no discount, the stay includes Friday night. Friday is selected because it is a day of departure, as explained in Days of the week.
Long weekend
Weekend guests tend to book Friday and Saturday and leave Sunday night empty. Reward the ones who add a night.
| Field | Value |
|---|---|
| Title | Long weekend -10% |
| Discount type | On the length of stay |
| Applied type | Arrival days |
| Applied days | THU, FRI |
| From | 3 |
| To | 4 |
| Value | 10 |
Result: Friday to Monday, 3 nights: discount on the whole stay. Friday to Sunday, 2 nights: full price. The same idea fills a single weak night: arrival day SUN, from 1 to 2 nights, for a Sunday-night offer.
Quiet dates
This is the discount that follows demand. It looks at how many rooms of the room type are still free for the dates the guest asks for, lowers the price while most of them are, and stops when the rooms fill up. Use two tiers that do not overlap:
| Title | Discount type | From | To | Value |
|---|---|---|---|---|
| Quiet dates -10% | On room type availability | 70 | 100 | 10 |
| Quiet dates -5% | On room type availability | 40 | 69 | 5 |
Result: the room type has 10 double rooms. For dates where 8 are free, the availability is 80% and the guest gets 10% off. When 5 are free, 50%, the discount is 5%. When 3 are free, 30%, the price is the full price.
NOTE This type needs several rooms per room type to be useful. A room type with a single room, such as a holiday apartment, is either 100% free or not bookable, so the discount would apply to every booking.
Several rooms
Families, wedding guests and small groups book several rooms at once. A discount on the number of rooms wins the booking that would otherwise be split over two hotels.
| Field | Value |
|---|---|
| Title | 3 rooms and more -10% |
| Discount type | On number of booked rooms |
| From | 3 |
| To | 10 |
| Value | 10 |
Result: 4 rooms for 2 nights at €90 come to €720. The guest gets €72 off and pays €648. The rooms can be of different room types: two doubles and two twins count as four rooms.
IMPORTANT This type is processed after all the others, and it is skipped when a discount that was applied to one of the rooms has Stop further processing set to Yes. If a booking can match both, for example a group that also books early, decide which one the guest should get. See Combining discounts.
Low season sale
The validity period turns any discount into a seasonal offer. Here, a sale for stays in the weeks before Christmas.
| Field | Value |
|---|---|
| Title | Autumn sale -20% |
| Discount type | On the length of stay |
| Valid from | 2 November 2026 |
| Valid to | 18 December 2026 |
| From | 2 |
| To | 30 |
| Value | 20 |
Result: a stay from 20 to 23 November gets 20% off. A stay from 16 to 19 December does not, because the guest leaves after 18 December. If the last discounted night is the night of 18 December, set Valid to to 19 December.
Fixed amount
An amount is easier to advertise than a percentage: "€50 off your week by the sea". Set Is percent? to No.
| Field | Value |
|---|---|
| Title | €50 off a week |
| Discount type | On the length of stay |
| From | 7 |
| To | 365 |
| Value | 50 |
| Is percent? | No |
Result: a week in one apartment is €50 cheaper. A week in two apartments is €100 cheaper, because the amount is given for each room. Keep the amount well below the price of the shortest and cheapest stay that can match.
Combining discounts
When several discounts match a room, Solidres processes them in the order of their Priority, 1 first. Give each discount of a property its own number, so the order is never in doubt.
What happens next depends on Stop further processing of each discount that applies:
| Stop further processing of Early bird | Early bird | Weekly stay | The guest pays |
|---|---|---|---|
| Yes | 15% of €1,000 = €150 | Skipped | €850 |
| No | 15% of €1,000 = €150 | 10% of €850 = €85 | €765 |
Three things follow from this:
- Percentages do not add up. Each one is calculated on what is left after the discounts before it: 15% and 10% make 23.5%, not 25%.
- To give the guest the best single discount, give the largest discount the highest priority and leave Stop further processing on Yes everywhere. This is the safe setup, and the default.
- To let discounts add up, set Stop further processing to No on every discount except the last, and work out the largest total a booking can reach before you publish.
A discount of the type On number of booked rooms is always processed last, once per booking. It is calculated on the room total of the booking and added to the discounts the rooms already received.
Discounts in the partner dashboard
With the Hub plugin, partners manage the discounts of their own properties from the partner dashboard, under Discounts. The form is the same. A partner sees and edits only the discounts of the properties they own.
Discounts for experiences
With the Experience plugin installed next to the Discount plugin, discounts for experiences have a list of their own, under Solidres → Experiences → Discounts. The form works the same way, with four discount types:
| Discount type | From and To are counted in |
|---|---|
| Length of stay (hours) | Hours, for an experience with a duration in hours |
| Length of stay (days) | Days, for an experience with a duration in days |
| On the experience availability | % |
| On number of days booked in advance | Days |
NOTE For experiences, Valid from and Valid to are compared with the day the booking is made, not with the date of the experience.
Checking that it works
- On your website, search the property for dates that meet the conditions of the discount. The rate shows the discounted price.
- Continue to the booking summary. It carries a Total discount line, and the grand total is lower by that amount.
- Search again for dates that do not meet the conditions: one night fewer, or a departure one day after Valid to. The price is the full price.
Check the third step as carefully as the first. A discount that applies too often costs more than one that does not apply.
Troubleshooting
| Symptom | Cause and fix |
|---|---|
| The installer stops with "Solidres Experience plugin version 2.0.0 or later is required" | You are installing Discount 1.0.1 or older. Download the current version from your Download page: from 1.0.2, the Discount plugin no longer needs the Experience plugin. |
| No discount is ever applied | The Solidres - Discount plugin is disabled. Enable it under System → Plugins. |
| The Applied to list is empty | Choose the Property first. The list is filled with its room types. |
| One discount is not applied | Check, in this order: the discount is published; the room type is selected in Applied to; the whole stay, the day of departure included, is inside the validity period; the days of the week match; the stay is inside From and To; no discount with a higher priority has Stop further processing set to Yes. |
| A discount with Staying days is not applied | The day of departure has to be one of the selected days. See Days of the week. |
| The discount on the number of rooms is not applied | A discount applied to one of the rooms has Stop further processing set to Yes. Set it to No if the two are meant to add up. |
| Two percentages give less than their sum | Each percentage is calculated on what is left after the discounts before it. See Combining discounts. |
| A fixed amount is taken off several times | A fixed amount is given for each room of the booking. Use a percentage, or the type On number of booked rooms, which is given once per booking. |
| The discount is smaller or larger than the percentage of the price the guest sees | The option Discount pre tax decides whether the percentage is taken of the price with or without tax. Extras are never discounted. See Before or after tax. |
| A discount is applied to every booking | The condition is too wide. Typical cases: On the length of stay from 1 night, or On room type availability on a room type with a single room. |