В одном из проектов была схожая задача.
Цена на услугу определялась так-же временем суток. На странице заказа должно было быть вот так:
Заполнять руками все времена для нескольких квестов на месяц вперед- АД!
Более менее удобным оказалось вот так:
Кликаем на нужные времена, выбираем ценовую группу, и добавляется новый блок (несколько времен или в вашем случае мест в зале, группируются по цене).
Этот же интерфейс может показывать свободные и занятые места. И оформлять "заказ" по клику на приглядевшееся место.
Я бы сделал несколько групп мест. У каждой группы свой набор параметров.
"Карту" мест хранил бы как матрицу с номерами групп.
// 1 - дорогие места, 2 - норм, 3 - ничего не видно
var area = [
[2, 1, 1, 2],
[3, 2, 1, 1, 2, 3],
[3, 2, 2, 3],
];
// теперь нам известно, какое место, какой ряд, сколько стоит.
При оформлении заказа можно нужный элемент матрицы заменять на id заказа.
Тогда очень легко будет вывести только свободные места, только свободные конкретной группы, только 3 свободных подряд, короче любые варианты. А если место занято, то тут-же можно получить данные заказа по id.