One of the key design principles of the system (which it’s much, much too late to go back and change even if we wanted to) is that membership discounts must apply automatically.
If you have a ticket in your basket, and add a membership, it should change to the membership price.
If you have a ticket in your basket and log in as a member, it should change to the membership price.
This means we can’t have a simple price list (Full Price £15 Members £12.50 Concessions £10) because the system needs to know that a full price ticket can be turned into a membership price ticket by the addition of a membership. They aren’t just prices, there is a relationship between different kinds of discount.
This is why the Discount Schemes are list of RULES, not lists of prices. The idea is, we’re asking for 2 adult and 2 child tickets (that’s the input) and the system tells us what the best price it can do is, based on your membership status, dates (for earlybird discounts), and other factors. The concession types (adult, child, student, etc) are fixed - that’s a description of who’s going to be using the ticket. The customer status types (gold member, silver member, etc) can change - by changing the customer or by adding a membership.
So far so good. We ask the buyer what kind of people are using the tickets, they tell us, we give them a price.
Now, what if the membership benefit is limited to only one ticket? E.g. “Gold membership gets you one free ticket per performance”. The rule says “if you are an member tickets are free”, and then a Product Limit says “At most one ticket at the membership price”. If you ask for 2 members, you get 1 member and 1 adult. If you ask for 2 adults, you get 1 member and 1 adult.
The original design was to just display a list of concession types, and calculate the actual prices, but the price preview would look weird: it would say “Adult £0” but then if you asked for 2 you’d get one free adult and one full price adult.
This was a problem, so a long time ago I tried to fix it by changing the display so that it listed every rule in the discount scheme, instead of every concession type. That way, you’d still see full price, and you’d see member next to it. It didn’t matter how many full price or membership tickets you asked for - they were treated the same - but it made the display make more sense:
The problem with this is that if you have lots of rules in the discount scheme which all have the same concession type, but are limited by price band, it looks awful - e.g. here there are 4 rules that apply a different Over 60 discount to different price bands and because each rule is listed, the Over 60 name is repeated 4 times (there’s a rule for Restricted View even though the discount is £0)
In this case, we clearly need to group the discount rules by concession type.
I’ve changed it to group by concession type, but now that means in the former case the prices are displayed using the membership benefit, and there’s nothing to tell you that the membership price only applies to 1 ticket:
even though when you add them to the basket you can see that clearly:
So: 2 approaches, and each approach has a use case where it works and one where it is broken.
My plan is to resolve this by adding a new basket display just by the quantity picker controls showing what is IN the basket (for that product).
So the quantity pickers are per-concession type (as in the original design and my development code now but not the live code) and in order to deal with the confusion caused by membership limits a read only summary of what that request results in is displayed below.
If anyone has any comments or better ideas I’d love to hear them!