Описание проекта
Бронирование раздельно контролирует две вещи, которые автомобильный паром не должен перепродать одновременно: пассажирские места и полосы на автомобильной палубе. Когда клиент бронирует легковую машину, фургон, автодом или велосипед, движок резервирует длину на нужной палубе и сверяет её с измеренной вместимостью назначенного судна, а билеты пеших пассажиров списываются из отдельного пула по головам. Полосы приоритетной погрузки позволяют постоянным клиентам и грузоперевозчикам, оплатившим приоритет, заезжать раньше очереди ожидания, а экран расстановки показывает докерам, к какой полосе относится каждое бронирование.
Поскольку паром зависит от погоды, в приложении есть слой отмен и сбоев: оператор помечает рейс как отменённый, задержанный или приостановленный по погоде, и каждый держатель билета получает уведомление по почте и SMS с вариантами перебронирования на ближайшую переправу. Модуль абонемента продаёт месячные и многоразовые проездные для местных жителей, которые переправляются ежедневно, с автоматическим списанием тарифа и QR-кодом, который матрос сканирует при посадке. Тариф складывается из класса автомобиля, числа пассажиров, маршрута и сезона, всё работает на PHP с базой PostgreSQL и печатным манифестом для береговой охраны.