Question

I want (need) to implement a stadium ticket selling.
The idea is to let the customer choose his number of tickets (a capping on that might be needed but this is no big issue. I think I can achieve this through max qty allowed in cart). After that the customer must choose his seats from a seat map. After that the checkout process should go as usual.
Does anybody know an extension for this? I searched for one but I didn't find one to fit my needs. Or maybe my google skills need improvement.
If there is no extension, some pointers on how to do it would be great.
My idea so far is to create a product called 'Ticket' with some custom options (sector, row, seat number and maybe others).
The view page will be custom made, so the custom options will not be shown. The ticket selection will happen in a popup or overlay, and based on the selection I will simulate the custom options when adding to the cart.
The seat map will be kept in a table so I can mark the booked seats. The stadium is always the same so one map should be enough.
That's about it so far. Something seams to be missing. Any pointers would be great.
[EDIT]
There is a possibility to create a configurable product with 3 attributes (sector, row and seat number, each combination in qty available of 1 so they will not be available once they are bought), but this would mean 30k+ products (per event). I reeeealy don't want to go there. I'm keeping this as a last desperate resort.. (This is no longer an option because will result in a huuuuge performance issue)

Was it helpful?

Solution

I've done something like this, and this is a contrived example and over-simplified to see if you would even consider this to be a viable solution:

It's similar to defining a sudoku grid but that sudoku grid's open areas are open seats:

$section1 = <<<SECTION

A,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,
B,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-
C,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-
D,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-
E,-,-,-,-,-,-,-,-,-,-,-,-

SECTION;

That seat chart (sudoku grid) is stored on a per-product basis. Every event is a new product. The grid is updated when someone adds to the cart (or purchases, depending on business rules):

$section1 = <<<SECTION

A,-,-,x,-,-,-,-,-,x,-,-,x,x,x,x,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,
B,-,-,-,-,-,-,-,-,-,-,-,-,-,x,-,-,-,-,-,-,-,-,-,-,-,-,-
C,-,-,-,-,-,x,x,x,-,x,-,x,-,-,-,-,-,-,-,-,-
D,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-
E,-,-,-,-,-,x,-,x,-,x,-,x

SECTION;

To break apart seat availability in your backend model it's a simple explode:

$chart = array();

$section = trim(explode('\n', $product->getSeatingChart()));

foreach($section as $row){
    $seats = explode(',',$row);
    $rownum = array_shift($seats);
    $chart[$rownum] = $seats;
}

We can turn $chart into booleans:

array_walk($chart,function(&$s){
    $s = $s == "-" ? true : false;
});

Check if A14 is available (0 indexed, remember):

function checkAvailability($row,$seatnum){

    return $chart[$row][$seatnum-1] == true;

}

Upside:

Implementation is dead-simple: your seating availability attribute is parsed by a backend model. It's essentially a custom EAV attribute. You also can set up pricing based on sections. Each Section is a new SKU with a new price. You can block off seats at some events and not at others. Also, no need to carry real inventory, only set the qty on the sales order item during checkout for pricing.

Tiers will work, too, so you get bulk purchase discounts for free; that may have been a concern with custom options.

Downside:

Seat reservation is going to be your biggest headache because you don't carry actual inventory; that's where this method falls apart. Business rules will determine how you lock/hold seats during checkout.

OTHER TIPS

I agree configurable products aren't a great idea a seat is really only a pointer to if its available or sold and representing this with a Magento product sounds like overkill.

I'd suggest a custom module which would include a table of records for each Event, the tickets would then be for this Event and upon creation of an Event a simple product would be created to represent this in the store. You can use a product attribute to hold the reference to the event and custom options populated from the front end view page that you mention to store which seat was purchased.

Licensed under: CC-BY-SA with attribution
Not affiliated with magento.stackexchange
scroll top