[oneBooking] Версия 2.0.0-pl Доп. функционал

По результатам коллективного обсуждения первой версии предлагаю новую версию с дополнительным функционалом.

Что нового
— Добавлена кнопка «Бронировать» для вывода на странице ресурса.
— Теперь при редактировании заявки пользователю отправляется соответствующее уведомление.
— Появилась возможность отправлять пользователю сообщения.
— Все сообщения, отправленные пользователю, сохраняются в журнале.
— У заявок теперь есть статусы.
— Теперь при бронировании можно указывать количество объектов.
— Появилась кнопка для расчета суммы по введенным данным.
— Заявки теперь можно копировать.
— С разделе спец. предложения можно указывать не только диапазон, но и конкретные дни.
— Расширены возможности поиска заявок.


Начнем по порядку.
Теперь на странице ресурса с описанием можно вставить кнопку бронирования. Вызывается тот же диалог, что и в календаре, но с уже определенным типом объекта. За это отвечает параметр object и указывает он на ID объекта из справочника объектов (в текущей настройке — номеров).
Вызывается он так
[[oneBooking? &object=`1`]]


Нажимаем и получаем диалог только с одним указанным типом объекта.

Как видно по картинке, теперь можно указать количество объектов, а также рассчитать стоимость брони на указанные даты с учетом скидок/наценок. Такой же функционал есть и в админке.

Но здесь можно указать статус заявки. Кстати, теперь при изменении заявки, пользователю отправляется уведомление. Правда эту возможность можно отключить. За это отвечает соответствующий чекбокс внизу диалога.
Про статусы расскажу подробнее. Я не стал создавать отдельную таблицу для них и поступил проще. Использовал для них лексикон.
$_lang['ob.status.0'] = 'Аннулирована'; //Не изменять
$_lang['ob.status.1'] = 'Новая';  //Не изменять
$_lang['ob.status.2'] = 'Подтверждена';
Первые две системные. Их трогать нельзя — новой заявке присваивается статус под номером 1 («Новая»). В остальном ограничений нет. Например, нужен статус «Оплачено», добавляем
$_lang['ob.status.3'] = 'Оплачено';
Чистим кэш (лексиконы кешируются). И все, статус появляется в диалоге.
С валютой такая же история.
$_lang['ob.currency.0'] = 'руб.';
$_lang['ob.currency.1'] = '$';
$_lang['ob.currency.2'] = '€';
Но здесь особых требований нет. Можно в любой момент список менять.

Ещё из нового. На первой картинке в колонке «Действия» видим 2 новых кнопки — конвертик и копирование.
Ну с копированием все понятно. А вот конвертик отвечает за новый интерфейс сообщений. Интерфейс — это окно с двумя вкладками.
На первой можно отправить письмецо.

На второй — журнал с историей отправленных сообщений. По двойному клику можно открыть любое сообщение.


В диалоге объекта в разделе спец. предложений появилась возможность кроме периода указывать еще и конкретные дни.

Можно указывать только начальную дату или только конечную. В общем ничего сложного.

Кроме того, улучшена возможность поиска заявок. Теперь их можно искать по датам, по статусу и по любому слову (имя пользователя, номер телефона, email и т.д.).

В общем это все изменения. Компонент получился достаточно взрослый и для своей цены очень привлекательный. Сложные моменты из предыдущиего обсуждения я оставил для другого дополнения. Не стал утяжелять этот. Но если кому еще какие идеи в голову придут, пишите не стесняйтесь.

П.С. На всякий случай повторю, бронировать можно все что угодно, просто нужно поменять соответствующие записи в лексиконе, чтобы в интерфейсе отображались нужные названия.
$_lang['onebooking_tab2'] = 'Номера'; //Заменить, например, на Автомобили
$_lang['ob.object'] = 'Номер'; // Автомобиль
...
Дополнительные материалы.
oneBooking. Версия 1.
oneBooking. Версия 3. Интеграция с минишоп для онлайн оплаты.
oneBooking. Версия 3.1.0.
Сергей Шлоков
05 июня 2015, 18:22
modx.pro
6
2 378
+8
Поблагодарить автора Отправить деньги

Комментарии: 63

Воеводский Михаил
06 июня 2015, 13:13
+1
Сергей, отличная работа!
Компонент вырос многократно. Ура, для MODX теперь есть полноценный модуль работы с бронями!
    Сергей Шлоков
    06 июня 2015, 14:09
    +1
    Спасибо!
    Осталось дождаться благодарных пользователей.
    Максим Кузнецов
    06 июня 2015, 14:32
    0
    Выглядит здорово.) Только достаточно узконаправленно — даже немного жаль, что такой серьезный модуль имеет достаточно узкую область применения.
      Сергей Шлоков
      06 июня 2015, 14:34
      0
      А чем узкость?
        Максим Кузнецов
        06 июня 2015, 14:45
        0
        Диапазон сайтов, где необходим функционал бронирования чего-либо по календарным дням.
          Сергей Шлоков
          06 июня 2015, 14:51
          0
          А что мешает поправить лексикон? Например, вместо «номер» написать «студия звукозаписи» или «автомобиль». Он для такой гибкости и придуман.
            Виктор
            06 июня 2015, 15:09
            0
            Возможно, Максим имеет ввиду, что можно, например, записываться к мастеру, зубному и т.п. на определенное время.
            А так еще возможное применение бронировать товары в магазине, не знаю на сколько компонент готов к такому. В любом случае невозможно сделать компонент который будет понятный и в тоже время выполнять все возможные задачи. Лучше иметь 3 компонента которые решают свои задачи, чем один который делает все.
              Сергей Шлоков
              06 июня 2015, 15:56
              +2
              Лучше иметь 3 компонента которые решают свои задачи, чем один который делает все.
              Вот. Именно об этом я и говорю. Комбайн всегда хуже. И масштабировать тут не получится.
              Про время уже обсуждали. Это функционал для нового дополнения. Ибо компонент сразу усложняется. А значит и стоимость его будет выше. А кому-то вполне достаточно суточного периода. Зачем переплачивать.
              Есть уже объем работ по новому, более сложному, компоненту бронирования. Там будет и почасовое бронирование. Сейчас более глубоко изучаю тему…
          Alexander V
          15 июня 2015, 21:39
          0
          В лексиконах. Наверное придётся в шаблон хардкодить. У меня допустим есть и номера и автомобили и ещё что-то… Общим словом не обойтись.
            Сергей Шлоков
            15 июня 2015, 21:52
            0
            Да можно и в шаблонах. Но в админке шаблоны не помогут, там только лексиконы.
              Alexander V
              15 июня 2015, 21:58
              0
              Где вы раньше были? 31 мая сдал lankarus.com/ Поговорю, может прилепим бронирование. Сейчас всё сводится к тому, что на странице гостиницы клиент заполняет 1 поле в произвольной форме, тем самым создавая тикет. И там уже менеджер ведет с ним переписку в комментариях.
                Сергей Шлоков
                15 июня 2015, 22:23
                0
                Где вы раньше были?
                Смотря во сколько? :)
                Ну если очень нужна именно переписка, то oneBooking не подойдет. Там только односторонняя связь для уведомления пользователя.
                  Alexander V
                  15 июня 2015, 22:30
                  0
                  Бронирование дело хорошее, но много нюансов. Всё равно всё сводится к общению с клиентом. Он как минимум должен подтвердить свои намерения и менеджер должен убедится, что клиент правильно понял, что его ждёт.
                  Подойдет если только для учета, посмотреть, что есть в наличии, тоже полезно.
                    Сергей Шлоков
                    15 июня 2015, 22:38
                    0
                    Мы несколько раз в год ездим на разные базы отдыха уже несколько лет. Ни разу не общались по почте. Всегда только по телефону. Вот как я понимаю, процесс на своем многолетнем опыте.
                    Забронировал через сайт -> менеджер перезвонил -> мы подтвердили -> оплатили аванс -> приехали и на месте оплатили все.
                    Так работают большинство подмосковных пансионатов и баз отдыха.
                    А переписка это очень не надежно и долго. Не ответил клиент по почте и что думать? Все равно звонить надо.
                      Alexander V
                      15 июня 2015, 22:42
                      0
                      Телефон само-собой. Но текст нужен обязательно. Например дать ссылку на документ/форму. Да мало ли какие ещё данные, которые по телефону получить не реально. Хотя обходились несколько раз и обычной электронкой. В Турляндию когда ездили, просили номера рядом, детскую коляску и кое-какую бытовую технику в номер.
                        Сергей Шлоков
                        15 июня 2015, 22:52
                        0
                        В данном случае, пользователю приходит письмо с сайта. Он может ответить на него и прислать дополнительные данные. А менеджер, который рулит почтой, вносит необходимые данные в заявку.
                        А делать еще и полноценный почтовый интерфейс, мне кажется, это лишнее.
        ck
        ck
        13 июня 2015, 03:38
        0
        Есть ли возможность оплаты клиентом брони он-лайн?
          Сергей Шлоков
          13 июня 2015, 07:19
          0
          Пока нет.
            ck
            ck
            19 июня 2015, 13:57
            0
            Можно ли будет заказать эту фичу? Если да, то каков бюджет?
            (личка sergeykarpuk — skype)
                Сергей Шлоков
                19 июня 2015, 14:56
                0
                Михаил уже ответил. От себя добавлю…
                У меня пока нет полного понимания куда это прикручивать. У всех по разному, но подходящее решение не нашел. Пока мысль остановилась на ссылке в письме — т.е. человек забронировал, ему пришло письмо, а в нем ссылочка «Оплатить». Как альтернатива — это регистрация пользователя, кабинет, а в нем заявки. Но это сложно и я не нашел таких примеров в интернете.
                Поэтому пока разбираюсь с минишопом, надеюсь что-то еще придет в голову. Или кто умный подскажет идею.
                  ck
                  ck
                  09 июля 2015, 14:29
                  0
                  Продвинулись ли в решении вопроса он-лайн оплаты?
                    Сергей Шлоков
                    11 июля 2015, 08:59
                    +1
                    Да. Осталось протестировать. Вернусь из отпуска — закончу.
                      ck
                      ck
                      14 июля 2015, 14:19
                      0
                      Хорошая новость.
                      Когда ждать из отпуска-то? :)

                      Нужно знать, пилить своими силами или дождаться выхода авторской версии.
                      Кстати, оплату через miniShop2 подключали?
                        Сергей Шлоков
                        15 июля 2015, 11:25
                        0
                        К выходным.
                        Кстати, оплату через miniShop2 подключали?
                        Да.
                          ck
                          ck
                          15 июля 2015, 11:52
                          0
                          Здорово.
                          Посмотреть бы, конечно, на реализацию :)
                          Например, можно ли будет несколько цен забить в зависимости от выбранных характеристик бронирования.

                          P.S. Если есть возможность выйти на связь в skype или по электронке — контакты выше.
                            Сергей Шлоков
                            15 июля 2015, 12:09
                            0
                            Реализация достаточно простая — в диалоге дополнительное поле с методами оплаты из минишопа.
                            Например, можно ли будет несколько цен забить в зависимости от выбранных характеристик бронирования.
                            У этого компонента нет характеристик бронирования. Есть объект и его стоимость в день. А цена определяется произведением дней на стоимость.
                              ck
                              ck
                              15 июля 2015, 12:19
                              0
                              Оформляю покупку компонента oneBooking для поддержания разговора :). Обновление потом можно будет накатить?
                              Сергей Шлоков
                              15 июля 2015, 12:30
                              0
                              Если есть пара месяцев в запасе, то можно подождать более навороченную версию бронирования в виде отдельного компонента. Правда с другой стоимостью.
                              Обновление потом можно будет накатить?
                              Если будет желание зайти в меню Приложения, там в приложениях найти oneBooking и нажать кнопку Обновить. :)
                              ck
                              ck
                              15 июля 2015, 12:38
                              0
                              Дорабатывать всегда есть что, поэтому это не повод ждать.
                              Требуется текущий функционал + он-лайн оплата.
                              К выходным, насколько понял, можно ждать вторую часть.
                              Сергей Шлоков
                              15 июля 2015, 12:46
                              0
                              К выходным, насколько понял, можно ждать вторую часть.
                              К выходным можно ждать меня из отпуска. :) А разработке смогу приступить только после выходных.
                              ck
                              ck
                              15 июля 2015, 12:50
                              0
                              Ага! Т.е. ближайшее время ждать функционала он-лайн оплаты не стоит. Что ж, тогда будем реализовывать своими силами.
          Григорий Коленько
          22 июня 2015, 18:27
          0
          Было бы здорово еще интегрировать с mSearch2, чтобы можно было выбрать даты приезда и отъезда и выводились ресурсы, которые не забронированы на эти даты.
            Илья Карпов
            20 июля 2015, 14:00
            0
            Скажите а англоязычная есть версия? и можно ли как то связать доступность с гугл календарем.
              Сергей Шлоков
              20 июля 2015, 14:16
              0
              Скажите а англоязычная есть версия?
              Да.
              и можно ли как то связать доступность с гугл календарем.
              Нет.
                Илья Карпов
                26 июля 2015, 07:21
                0
                Можно это настроить как просто заявку да? если даты не заполнять занятые чтоб клиент это как запрос доступности делал
                  Сергей Шлоков
                  26 июля 2015, 07:51
                  0
                  Честно говоря, не понял вопроса. Как без дат проверять доступность?
                    Илья Карпов
                    26 июля 2015, 08:09
                    0
                    нет гость через этот модуль делает заказ а мы уже на основе его ему отвечаем доступно или нет. Потому что у нас вся доступность синхронизируется только через google ical или xml гугл. а вы сказали что это не возможно синхронизировать. все ресурсы такие как airbnb flipkey homeaway синхронизируются через google календарь
                      Сергей Шлоков
                      26 июля 2015, 08:15
                      0
                      Вы не поняли моего вопроса
                      Как без дат проверять доступность?
                      Как вы поймете, когда пользователю нужна бронь?
                        Илья Карпов
                        26 июля 2015, 08:17
                        0
                        вот же даты
                          Сергей Шлоков
                          26 июля 2015, 08:30
                          0
                          Главное, чтоб вам понятно было.
                          По заявке… Сейчас заявку сделать нельзя — жестко проверяется наличие. Если нужно, я могу добавить настройку «Не проверять доступность». Но тогда нужно будет самим её отслеживать.
                r5uY40
                31 июля 2015, 16:59
                0
                @Сергей Шлоков
                Сергей, скажите, пожалуйста, можно ли сейчас реализовать такую логику в oneBooking «из-коробки» (для отеля). Сразу извиняюсь за нубский вопрос.

                1. Клиент выбирает нужный диапазон дат
                2. Если на выбранные даты есть свободные номера, то появляется форма для заполнения и отправки контактной информации.
                3. В этой форме можно создать любые типы полей.

                Или надо использовать какой-то сторонний компонент для создания формы с контактными данными?

                Форма примерно такая:



                Прилетаем-улетаем на скрине зачеркнул, т.к. если будет выбор дат на первом шаге, то они заполнятся автоматически.
                  Сергей Шлоков
                  31 июля 2015, 17:12
                  0
                  Первый пункт да, а вот по остальным уже не так. Проверка на наличие свободных номеров осуществляется после заполнения всех полей. А типы полей только определенные в системе.
                    r5uY40
                    31 июля 2015, 17:42
                    0
                    А можно попросить сделать проверку полей до заполнения контактных данных?
                    А то сейчас получается, что мы просим юзера заполнить перс. данные (условно), а потом говорим — извини, друг, заявка не принята, мест нет.
                    Или я ошибаюсь, и юзер просто не выберет те даты, которые стоят в стопе?

                      Сергей Шлоков
                      31 июля 2015, 17:56
                      0
                      Я просто не представляю как это реализовать. Пользователь открывает диалог и в нем может выбирать даты, объект, количество. Как это определить до заполнения?
                        Воеводский Михаил
                        31 июля 2015, 17:59
                        0
                        Пользователь открывает диалог и в нем может выбирать даты, объект, количество.
                        … и, если выбранные объекты на выбранные даты свободны, пользователю становятся доступны поля для ввода контактных данных.
                          Сергей Шлоков
                          31 июля 2015, 18:01
                          0
                          Это просто засада — постоянно запросы посылать, после каждого клика.
                            Воеводский Михаил
                            31 июля 2015, 18:05
                            +1
                            Добавить кнопку «Проверить». На большинстве сайтов по бронированию сделано именно так — сначала заполняются все параметры поиска, затем необходимо нажать «Поиск». И только после этого начинается подбор вариантов.
                              r5uY40
                              31 июля 2015, 18:07
                              0
                              Поддержу «Проверить».
                                Сергей Шлоков
                                31 июля 2015, 18:19
                                +1
                                Такую проверку логичнее делать в виде многоступенчатого бронирования —
                                1. Выбираешь даты, объект (например, номер) и количество. Нажимаешь Далее. (На этом этапе и проверять доступность)
                                2. Указываешь свои реквизиты. Далее.
                                3. Оплатить. Сохранить заявку.
                                  Воеводский Михаил
                                  31 июля 2015, 18:20
                                  +1
                                  Все верно, стандартный и привычный для большинства механизм.
                                    r5uY40
                                    31 июля 2015, 19:15
                                    0
                                    Вариант нравится.
                              r5uY40
                              31 июля 2015, 18:06
                              +1
                              Для отеля (маленького) думаю, достаточно просто. Т.к. свободные номер либо есть, либо их нет. Я примерно так это вижу:

                              А.

                              1. Смотрим на календарь и видим цветами — свободно или нет. Зеленые — свободные, а красные — в стопе.
                              2. Если есть нужное нам кол-во свободных номеров подряд — выбираем в календаре первый день (тык мышкой) пребывания и последний день пребывания.
                              3. Открывается форма диалога. В ней уже есть эти данные по датам. Заполняем перс. данные. Сабмит. Уведомление админу, уведомление юзеру на емайл.

                              Б.

                              Если календарь по тем или иным причинам не выведен на сайте, а есть только форма диалога, то выбирает даты заезда и отъезда (1 шаг заполнения формы), остальные поля ридОнли. Система проверяет их на доступность (аякс). Если они действительно свободны и ничего за последние секунды в бекэнде не поменялось, то ридОнли для перс. данных разблокируются и их можно засабмитить. Если заняты, то система говори — такие то даты из твоего дипазона заняты. Выбери другие. Свободны эти, эти, эти. Ближайший свободный диапазон дат — такой -то. И пока юзер не выберет корректный диапазон дат (свободный), поля для перс. данных остаются ридОнли и кнопка Сабмита неактивна.

                                Сергей Шлоков
                                31 июля 2015, 18:25
                                0
                                Для отеля (маленького) думаю, достаточно просто. Т.к. свободные номер либо есть, либо их нет.
                                Это только кажется. Могу сходу обратный пример привести — в середине периода доступно меньше номеров, чем в начале. Календарь зеленый, но выбрать нужное количество нельзя.
                                И еще вопрос. Каким образом тыкая в даты можно определить нужное количество номеров до открытия диалога?
                                  r5uY40
                                  31 июля 2015, 19:14
                                  0
                                  Тоже верно. Пока нравится вариант Михаила. С кнопкой Проверить.
                            r5uY40
                            03 августа 2015, 09:56
                            0
                            >А типы полей только определенные в системе.
                            Сергей, я смогу сконструировать такую форму в диалоговом окне, как на этом скрине?
                            В дополнение к стандартному диалогу. У меня тут только селекты используются. Цены нет. Если да, то как?
                              Сергей Шлоков
                              03 августа 2015, 10:16
                              0
                              Ну если переписать весь компонент, то да.
                                r5uY40
                                03 августа 2015, 10:24
                                0
                                Может как-то FormIt можно задействовать? Я не программист, к сож, поэтому для меня это сложновато без подсказки.
                                  Сергей Шлоков
                                  03 августа 2015, 10:28
                                  0
                                  Нужно добавить в таблицу нужные поля, прописать их обработку в класс, изменить диалог. Это равно переписать весь компонент
                                    r5uY40
                                    03 августа 2015, 10:31
                                    0
                                    Понял, спасибо. Значит он мне не подходит. Жалко.
                                      r5uY40
                                      06 августа 2015, 11:44
                                      0
                                      Сергей, мне кажется, что вы планируете развивать свой продукт.
                                      Есть классная система бронирования для Вордпресса. Посмотрите её, если получится. Мне кажется, что из неё можно взять удобные фичи. Те возможности, о которых я спрашивал выше, в частности. Она сделана на базе того простенького скрипта, который я вам высылал полгода назад.
                            Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
                            63