Hello and Happy New Year!
For our ADA compliance, our box office would like to move away from Seat Type and use Hold Codes instead. A wheelchair or its companion would have a type of "Regular" but it would also be assigned a hold code that more or less matches the type description. We also allow breakable holds on our site.
We have set hold codes on wheelchair seats and their companion seats and I'd like to be able to read those assigned hold codes via the API. So far, the only method I see that returns that value is "GetSeatsBriefEx" and its at the end of a comma-delimited string array. But I did read on another topic that once a seat is assigned a hold code, a record is written to the table "TX_PERF_HC". My thought was that we could write a local stored procedure that passes in parameters to query for the existence of a seat record that matches that in the users cart.
The idea is that if the user selects a WC seat, we will present a modal window that asks the user to attest they actually need the seat and give them the option to continue or empty their cart. In addition when they select a companion seat without selecting a WC seat, we will gracefully let them know they can't do that, empty their cart and send them back to select a different seat.
Between the two methods, "GetSeatsBriefEx" or "ExecuteLocalProcedure", which one would be the preferred/suggested method to do this? Or is there another preferred method I'm unaware of?
Are there any other clients that also need to read hold codes on the web? If so, whats your approach?
For the sake of maintainability, I would recommend using built-in API methods instead of custom stored procedures. Built-in methods will be better supported and documented.
Also, in the case of GetSeatsBriefEx, you may find that other information it returns is useful, particularly for display on a constituent-facing SYOS map. For example, seat_status can indicate whether the seat is available or in the cart or unavailable, and the seat num. and row num. may be useful for constituents who remember their preferred seat. Beyond your "wheelchair" hold code, other hold codes can represent other scenarios, such as having separate hold codes for companion seats, easy-transfer seats, and removed/blacked-out seats.
Note that GetSeatsBriefEx returns data about all seats, not just seats reserved in the cart. I may misunderstand your workflow, but I'm confused when you mention emptying the cart. It seems you may be reserving seats prematurely. You can display your "are you sure" modal before adding the seat to the cart, so no cart-clearing is necessary.
By the way, I've been modifying my organization's seat-selection web app, and I found one caveat for allowing the site to break hold codes: Once the seat is reserved in a cart and its hold code is broken, the API no longer reports the original hold code, so if you want the cart to indicate that a particular seat had a particular quality, such as wheelchair or companion, your application must remember this on its own.
Finally, I believe that Tessitura's best-seating algorithm relies on seat-type to locate wheelchair seats. I don't know of a supported way to customize this, but I'd be curious what others say on the matter.