Skip to content

Latest commit

History

22 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Компонент посуточного бронирования для Commerce.

image

Бронирование представляет собой товар с дополнительными свойствами - датой начала бронирования и датой завершения бронирования. При добавлении такого товара в корзину проверяется, свободны ли заданные даты для бронирования. Такая же проверка производится для товаров в корзине при оформлении заказа.

Есть возможность изменять логику проверки свободных дат с помощью плагинов.

При отмене заказа связанные с ним бронирования удаляются.

Менеджер может добавлять и изменять бронирования с помощью модуля.

Компонент бесплатен благодаря поддержке сообщества.

Установка

Установить, запустить модуль. Перед этим обязательно должен быть установлен Commerce. В списке событий плагин Booking должен идти после Commerce.

Форма для добавления в корзину

<form action="#" data-commerce-action="add">
<input type="hidden" name="id" value="[*id*]">
<input id="checkin" name="meta[begin]" placeholder="начало" />
<input id="checkout" name="meta[end]" placeholder="конец" />
<button type="submit">Добавить</button>
</form>

После добавления в корзину товару добавится также поле meta[type] со значением booking. При проверке корзины в процессе оформления заказа может быть добавлено также поле meta[notavailable], чтобы можно было показать, какие товары стали недоступны для бронирования.

Настройка

В параметрах плагина Booking задается:

  • модель MODxAPI для работы с документами (по умолчанию - \modResource);
  • шаблоны документов для бронирования, через запятую;
  • имя тв-параметра в котором указывается цена бронирования за сутки;
  • формат даты, который используется на сайте;
  • ID статуса отмены заказа;
  • имя лексикона для использования на сайте.

Серверные события

OnBookingCalculatePrice

Вызывается после расчета стоимости бронирования. Можно изменить стоимость или добавить дополнительные свойства.

Параметры:

Имя параметраПередается по ссылкеОписание
priceДастоимость бронирования
itemObjДаобъект MODxAPI для документа
itemДаданные товара в корзине
daysНетдлительность бронирования в сутках

OnBookingItemCheck

Вызывается после проверки дат для бронирования. Позволяет реализовать дополнительную логику проверки.

Параметры:

Имя параметраПередается по ссылкеОписание
itemObjДаобъект MODxAPI для документа
beginНетдата начала бронирования
endНетдата завершения бронирования
availableДарезультат проверки (true или false)

Серверный API

Вызов:

ci()->booking->метод(параметры);

Проверка дат (isAvailable)

Параметры:

  • id документа;
  • дата начала;
  • дата завершения;
  • формат даты в параметрах (если не указан, то берется из настроек плагина).

Возвращает true или false.

$result = ci()->booking->isAvailable(10, '01.01.2024', '10.01.2024', 'd.m.Y');

Получение списка занятых дат (getReservations)

Параметры:

  • id документа;
  • дата начала;
  • дата завершения;
  • формат даты в параметрах (если не указан, то берется из настроек плагина).

Возвращает массив с датами.

$result = ci()->booking->getReservations(10, '01.01.2024', '10.01.2024', 'd.m.Y');
[
['2023-12-20', '2024-01-03'],
['2024-01-05', '2024-01-07'],
]

Работа с БД

На основе MODxAPI.

use Pathologic\Commerce\Booking\Model;
$model = new Model($modx);
$result = $model->create([
'docid' => 10, //id документа
'begin' => '2024-01-01', //дата начала
'end' => '2024-01-10', //дата завершения
'orderid' => 0, //для связи с заказом
'description' => 'тест', //описание
'hash' => '' //хэш записи, если не указывать, то создастся автоматически
])->save();

Получение списка занятых дат на фронте

let bookedDates;
$.post('/booking/reservations', {
begin: '01.01.2024',
end: '10.01.2024',
id: 10,
}, function(response) {
if(response instanceof Array) {
bookedDates = response.map(d => {
if (d instanceof Array) {
const start = new Date(d[0]);
const end = new Date(d[1]);
return [start, end];
}
});
}
}, 'json');

About

Booking management addon for Evolution CMS Commerce

Resources

Stars

3 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages