После публикации первых частей сложилось впечатление, что мало кому интересно читать статьи данного цикла. Однако,
недавно увидел обратное, когда при взаимодействии с некоторыми участниками сообщества, они упоминали данные статьи.

Исправлю ситуацию, публикую оставшиеся части. На этот раз без картинок, да простят меня читающие :)

Часть 1. Предыстория.
Часть 2. Почему выбран MODX Revolution. Серверная часть.
Часть 3. Работа с оборудованием. Примерная хронология
проекта.
Часть 4. Синхронизация данных и обновление компонентов АСУ
Часть 5. Пути решения проблем при «непонятном» поведении
движка/компонентов. Реализация складского учета
Часть 6, 7. Текущие функциональные возможности АСУ
Часть 8. Текущие показатели АСУ. Желаемые планы. Заключение

Текущие функциональные возможности АСУ

  1. Прием заказов в кофейне сотрудником с использованием сенсорного моноблока
  2. Логирование действий барменов
  3. Путеводитель по процессу создания заказа (вопрос-ответ)
  4. Печать чеков на фискальном регистраторе
  5. Центральный сервер (далее ЦС) для агрегации данных
  6. Централизованное управление товарами и их составом
  7. Отчетность (статистика) для по продажам локально в кофейне и централизованно
  8. Синхронизация между всеми серверами в реальном времени
  9. Комплексные предложения (наборы товаров)
  10. Предложение доп. продаж позиций, соответствующих добавленным в заказ
  11. Флаеры
  12. Складской учет
  13. Интеграция с системой видеонаблюдения Video.NET
  14. Сотрудники – карточка сотрудника
  15. Программа лояльности, гости
    • Карточка гостя
    • Лицевой счет

    • Оплата заказов с карты гостя
    • Система подарков
    • Самостоятельная регистрация гостей на отдельном сайте
  16. Сканирование штрих-кодов на картах сотрудников и гостей
  17. Система резервного копирования всей сети в облачное хранилище
Как уже говорилось. В процессе планы корректировались, в связи с чем выполнены не все пункты изначального списка, но
добавлены отсутствующие изначально задачи.

Подробнее о некоторых модулях
Ниже описаны некоторые из модулей, описания которых ранее не было, а название недостаточно полно отражает суть и
возможности.

Путеводитель по процессу создания заказа (вопрос-ответ)
Если посетитель не знает, что хочет заказать, бармен может ему помочь. В данном случае все предложения формируются по
принципу ветвления в дереве, когда в зависимости от ответа на любом из уровней определяется ветвь, по которой необходимо
идти дальше.
Базовым является вопрос «Чего желаете»? После него происходит перечисление доступных вариантов.
Простой и очень абстрактный пример такого дерева из 3-х уровней:
  • Напитки
    • Чай
      • Черный 0.5
      • Зеленый 0.3

      • Кофе
        • Американо
        • Эспрессо

    • Еда
      • Грибной суп
      • Бутерброды
        • С ветчиной
        • С овощами

Как видно из примера, путем простого выбора можно быстро помочь посетителю сориентироваться в немаленьком меню и сделать заказ.Управление путеводителем осуществляется в специальном конструкторе на ЦС.

Комплексные предложения (наборы товаров)
Помимо простых товаров в продаже существуют комплексные предложения — завтраки, обеды и некоторые другие. Разумеется, такие наборы имеют сниженную по сравнению с отдельными товарами цену. Первоначально комплексы были реализованы в простейшем виде, где указывалась определенная цена набора, а при добавлении в заказ пропорционально пересчитывались цены всех входящих в набор товаров.

Через некоторое время потребовалось создать конструктор под другие задачи, но новый модуль идеально подходил на роль второй версии комплексов, чему все и обрадовались. После ее внедрения появилась возможность гибко управлять товарами, входящими в состав набора, а также указывать добавочную стоимость к отдельным позициям или группам. Таким образом один новый комплекс смог заменить 3-4 позиции устаревших комплексов, что значительно повысило удобство использования.

Предложение доп. продаж позиций, соответствующих добавленным в заказ
Одним из наиболее действенных инструментов для повышения среднего чека являются доп.продажи (upsale). Соответственно, в одной из первых версий были реализованы доп. предложения после добавления определенных позиций в заказ.Простейшие примеры: предложить к кофе молоко и корицу, к чаю предложить тортик или печенье. Не очень сложный механизм, состоящий из двухшаговых предложений (сначала добавки, потом десерты и еда), позволил максимально быстро включать даже новичков в процесс доп. продаж.

Флаеры
Под таким простым словом скрывается очень интересное предложение. Если Вы заказываете любой чай, то при предъявлении флаера получаете второй чай бесплатно. Аналогично с кофе и горячим шоколадом. Причем, мешать группы между собой не допускается. Самое интересное в том, что, получив флаер однажды, уже при следующем заказе его можно использовать для получения бонуса, причем наверняка выдадут следующий. Как итог, можно почти всегда получать вторую порцию бесплатно.

Однако, новую жизнь идея флаера получила после внедрения карт гостей, с помощью которых стало возможным накопление флаеров на счете карты без необходимости сбора и предъявления бумажных флаеров. Когда данную особенность представили как «Оформи карту друга и получай второй кофе бесплатно всегда», популярность карт гостей стала расти.

Интеграция с системой видеонаблюдения Video.NET
Указанная система видеонаблюдения позволяет интегрировать любые POS-системы для наложения текстового сопровождения действий сотрудников на видеоряд в реальном времени. В теории это все звучало красиво, модуль реализовали. К сожалению, из-за особенностей размещения данных пояснений от модуля вскоре отказались, так как практическое использование заявленной интеграции оказалось, скорее, бессмысленным, нежели полезным.

Система подарков
Задуманная изначально как программа лояльности, система подарков выросла в значительно более мощный инструмент, позволяющий создавать различные подарки и применять их в зависимости от множества условий. Некоторые примеры:
  • Начисление подарков на пустую карту для новых гостей
  • Подарок на день рождения
  • Подарок в определенный день года по любому из критериев (имя, возвраст, город и т. д.)
  • Некоторая сумма на счет существующему гостю или при создании нового и привязке карты с денежным подарком.
Самым массовым подарком в кофейнях, разумеется, стал каппучино, но и другие типы подарков активно используются. Особенно, при различных маркетинговых акциях.

Самостоятельная регистрация гостей на отдельном сайте
Данный сайт тоже реализован на MODX Revo. По своей сути он крайне простой, описывать с технической стороны практически нечего. Одна простая страница и пара сниппетов — больше ничего на нем нет. Назначение — предварительная регистрация гостя без доступа к ЦС с последующим переносом данных о госте на ЦС, если гость подтвердил свою регистрацию путем ввода SMS-кода. Благодаря такому механизму появляется возможность исключить неавторизованный доступ к ЦС и, дополнительно, сократить до нуля количество незавершенных регистраций гостей в АСУ.

Система резервного копирования всей сети в облачное хранилище
Через некоторое время после запуска проекта резервное копирование было настроено с помощью консольных bash-скриптов с заливкой в Google Drive. Поначалу казалось, что это хороший вариант, однако время показало обратное. Если требовалось изменить хотя бы один небольшой параметр, приходилось это делать на каждом сервере вручную.

Ближе к концу 2016 года появилась идея о создании отдельного компонента для резервного копирования сайта на MODX целиком, да еще и с поддержкой источников файлов. Результатом стала полноценная система, которая сначала архивирует весь сайт, затем сжимает дамп БД и заливает это все по WebDAV на удаленное хранилище.Самая интересная идея реализованной системы заключается в том, что заданием является JSON-массив, который очень удобно редактируется на ЦС, после чего, используя стандартный для АСУ синхронизатор, передается на все сервера сети.Благодаря такому решению появляется полный контроль за процессом создания резервных копий с максимально оперативным внесением изменений при необходимости. Данный компонент изначально разрабатывался как публичное решение. Все остановилось только лишь из-за необходимости интерфейсов на ExtJS, если выпускать его в свободное плавание.

*** Отвлечение от темы: с MODSTORE есть договоренность о финансировании доработки данного компонента для публикации. Если есть желающие реализовать интерфейс на возмездной основе — пишите письма.
Помимо этого, не исключен вариант предоставления открытого доступа к компоненту, дабы основные его возможности могли использовать все, кто заинтересован.


Текущие показатели АСУ

Приведу несколько показателей, которые наглядно показывают текущее состояние АСУ.
  • Время успешного функционирования системы: больше 3-х лет;
  • Количество кофеен и активных локальных серверов: 22;
  • Объем БД на ЦС: более 2.4 Гб;
  • Количество записей в самой большой таблице: более 8.8 млн. Таблица с данными о списаниях остатков в реальном
    времени;
  • Количество заказов: более 2.2 млн
  • Количество пользователей (сотрудников и гостей): более 23 000
  • Количество складских документов: более 62 000
Желаемые планыНекоторые моменты уже упоминались. Тем не менее, укажу и их.
  • Перевод всего back-end'a на REST
  • Перевод пользовательских интерфейсов на SPA
  • Обновление серверного ПО на следующую версию Ubuntu 18.04 LTS
  • Переезд на minishop2 2.4
  • Выделение складского учета в отдельный модуль
  • Выделение наиболее интересных наработок в отдельные модули
  • Добавление второго (и неограниченного количества) терминалов
  • Постепенное избавление от некоторых перегруженных сниппетов и подобных артефактов
  • Добавление поддержки криптовалюты для пополнения баланса карт гостей
  • Добавление отдельного терминала самообслуживания

Заключение

Как видно, АСУ, реализованная на MODX Revolution, получилась намного масштабнее, чем многие могут
себе даже в смелых мечтах представить возможности данного движка. Но самое интересное заключается в следующем: я
знаю, что в данном проекте не использованы даже 50% реальных возможностей MODX. Так что, я абсолютно уверен: на MODX
можно и нужно создавать крупные проекты, ведь ключевое — не ограничения инструмента, а прямые руки
разработчика! Спасибо всем, кто сумел прочитать все статьи и вникнуть в их содержание. Успехов Вам и хороших
интересных проектов!