Пример мобильного приложения на Glide для кафе (Часть 5).
Бронирование заказа
Мы с Вами сформировали корзину, просмотрели её, провели изменение (что-то удалили, что-то добавили). Но теперь надо дать знать ‘Администратору кафе‘ что решение принято, и мы хотим послать уведомление о заказе.
Здесь мы рассмотрим, как послать уведомление о заказе, в том числе о времени бронирования, номере столика (если мы уже там были), количестве мест, сумме заказа и других пожеланиях, если они у нас имеются. Примечание. Мы с вами уже имеем перечень блюд и идентификацию пользователя (заказчика) в таблице ‘Корзина’, и администратор уже может ориентироваться о меню
Давайте сначала получим сумму заказа и выведем её на экран вкладки ‘Корзина’. Для этого, давайте перейдём к таблице ‘Корзина’ и создадим новый столбец типа “IF -> Then -> Else” и назовём его “IF_цена заказа”. В строках условия (IF) напишем “Look_user_email” и “is signed-in user” то в строке (THEN) взять данные из колонки “SV_цена”. Т.е. если Email в корзине заказов совпадает с ‘email’ пользователя, то взять цену блюда из колонки “SV_цена” (Рис. 1) (IF_price).
Рис.1
Рис.2
Иными словами выделить все блюда данного пользователя и их стоимость. Если посмотреть таблицу ‘Корзина’, то можно увидеть что в ней находятся только цены блюд выбранного пользователя.
Теперь нам надо просуммировать стоимость этих блюд. Это на примере блюд мало, а в реальном заказе их может быть достаточно много и пользователь должен ориентироваться в цене заказа. Подсчёт суммы в Glide реализован с помощью функции ‘Rollup’. Поэтому, создадим ещё один столбец типа “Rollup” и назовём его “Roll_сумма заказа”, где в строке суммируйте значения (Summarize the values of) укажем наш полученный столбец, и не забудем в строке ‘Рассчитать’ выбрать из меню значок суммы “Sum” (Рис.2). (Sum) Давайте посмотрим на таблицу ‘Корзина’, то можно видеть, что стоимость заказа появилась во всех строках данной колонки. (Рис.3) (Tabl_sum_cart)
Рис.3
Но если мы теперь поменяем пользователя, например, вместо ‘Илья’ выберем ‘Наталья’, то в столбце ‘IF_цена заказа’ будут выбраны другие строки, а в столбце ‘Roll_сумма заказа’ будет сумма блюд пользователя Илья. Что нам и надо.
Рис.4
Давайте это значение покажем нашему пользователю. Перейдём на вкладку “Layout” и добавим на вкладку ‘Корзина’ новый компонент, здесь я выберу “Action Text” (хотя здесь можно использовать компонент ‘Title’, а также без заголовка компоненты ‘Rich Text’ и ‘Text’). В строке ‘Text’ укажем нашу колонку ‘Roll_сумма заказа’, а в строке ‘Title’ напишем ‘Сумма заказа’, в итоге получим нашу вкладку рис.5. (App_sum_order)
С блюдами мы определились, цена нас устраивает, и мы хотим забронировать наш выбор. Мы должны послать заказ администратору. Что нам надо иметь в заказе? Что нам нужно при бронировании кроме наших блюд?
Во первых, наверное идентифицировать пользователя, но у нас в приложении пользователи уже идентифицированы (мы имеем их имя, email и фото). Я думаю, что фото в заказе будет лишним, а имя (если его указал пользователь) и email (а это обязательный элемент, как в интернет магазинах) должны быть. Также мы можем указать в заказе время заявки, также на какое время мы делаем заказ, еще, наверное, нам надо дать пользователю возможность сделать комментарий. Например, указать число мест, написать пожелание (столик у окна, или столик у оркестра, а может быть даже указать номер столика). Ну и, наверное, указать цену заказа. Можно конечно указать и перечень блюд, но я думаю что он будет лишним, во первых это громоздко, а во вторых администратор и сам их может видеть в таблице ‘Корзина’.
Перейдём на вкладку ‘Data’ создадим новую таблицу и назовём её ‘Заказ’. По умолчанию Glide создал нам таблицу с одним столбцом ‘Name’. Оставим его. Создадим ещё несколько столбцов: “Email” типа ‘Email’, “Время заявки” типа ‘Date & Time’, “На время” типа ‘Date & Time’, “Комментарий” типа ‘Text’, “Стоимость заказа” типа ‘Text’ и неплохо бы создать столбец “Order ID” типа ‘Row ID’. (Рис.5)
Рис.5
Рис.6
Вернёмся на вкладку “Layout” и добавим на вкладку ‘Корзина’ новый компонент кнопку “Form Button”, где в строке ‘Label’ поменяем наименование на ‘Забронировать’, а в строке ACTION оставим действие по умолчанию без изменения (Show form screen title Форма). Вот у нас получилась такая вкладка (Рис.6) (App_order)
Нажмём на нашу кнопку ‘Забронировать’ у нас откроется новая вкладка ‘Форма’.
Рис.7
По умолчанию Glide предлагает нам в строке ‘Sheet’ таблицу ‘Лист1’, а нам надо ‘Заказ’. Поменяем. (Смотри окно справа). После этого Glide отобразит нам все столбцы таблицы ‘Заказ’. Но нам здесь нужно оставить только ‘Data Time’ “На время” и ‘Text Entry’ “Комментарий”. Всё остальное удалим. Не будем затруднять пользователя, всё остальное мы будем задавать автоматически, всё данные у нас есть (Рис.7). (App_form).
Если вдруг у вас таких компонентов нет создайте их.
Выберем мышью в левом окне компонент ‘Date Time’, перейдём в правое окно на вкладку ‘General’ и проверим, чтобы в строке ‘Column’ у нас был указан столбец “На время”, далее в разделе OPTIONS установим птичку в окошке “Required”(т.е. этот компонент сделаем обязательным для заполнения).
Аналогично выберем компонент ‘Text Entry’ и проверим, чтобы в строке ‘Column’ у нас был указан столбец “Комментарий”, также напишем, чтобы в строке ‘Label’ - ‘Комментарий’ (У меня Glide это проставил по умолчанию), и в строке ‘Size’ я указал средний квадратик, чтобы дать пользователю больше места для комментария.
Теперь добавим новый компонент “Current Date/Time”, он находится в разделе ‘SPECIAL VALUES’, и в строке ‘Column’ укажем столбец “Время заявки”
Рис.8
Следующий компонент ‘Name’мы найдём в разделе компонентов ‘VALUES FROM USER PROFILE’ (Это значения от таблицы ‘Users’ где у нас находятся данные пользователей). И выберем компонент “Name”, проверим в чтобы в строке ‘Column’ на вкладке ‘General’ был выбран столбец ‘Name’ от таблицы ‘Заказ’.
Аналогично найдём компонент “Email” и проверим, чтобы в строке ‘Column’ на вкладке ‘General’ также был выбран столбец ‘Email’.
Следующий компонент мы найдём в блоке значений от экрана ‘VALUES FROM SCREEN’ и это компонент “Roll_сумма заказа”. Осталось проверить, чтобы в строке ‘Column’ на вкладке ‘General’ был выбран столбец ‘Стоимость заказа’.
В итоге у нас выбраны следующие компоненты Рис.8. (Components_form)
Рис.9
Рис.10
Рис.11
Давайте посмотрим, что получилось. Нажимаем на окно ‘Data Time’ (На время), указываем последовательно дату, час, минуты (Рис 9, Рис.10).Далее вводим комментарий, например, “Столик у окна №2, 2 места” и нажимаем отправить (рис.11). (App_form_send). Давайте теперь поменяем пользователя ‘Илья’ на пользователя ‘Наталья’ и проделаем аналогичные действия.
Теперь перейдём к таблице заказов (‘Заказ’) и мы видим здесь оба наших заказа. Заказ от Ильи и заказ от Натальи (рис.12). (Tabl_orders) Если же вы повторяли этот пример самостоятельно, то теперь на своём смартфоне вы можете сделать заказ от своего имени, и он у вас сразу же отбразиться в таблице заказов.
Рис.12
Что нам и нужно было. Но следует сделать маленькое уточнение. В общем всё это применимо для небольших кафе, если же у нас заказы на группы где по несколько одинаковых групп блюд, то целесообразно дополнить выбор блюд столбцом ‘количество’ и вместо (или вместе) цены указать сумму за группу блюд (например 5 вторых, 10 кофе). При этом вместо типа столбца ‘Rollup’ (‘Roll_сумма заказа’) лучше использовать столбец типа “Math”, где можно использовать другие арифметические действия.
В общем наше приложение: “Мобильное кафе реализовано”. Заказ выбран и отправлен администратору кафе. Где тот может увидеть поступление заказа и отправить подтверждение или отказ на email заказчика. Что же должно происходить дальше с выбранными блюдами в корзине заказов. К сожалению, уже после выполнения заказа или в случае его отказа, уже сам администратор должен удалять заказ из корзины, иначе при следующем заказе они опять появятся в корзине у этого пользователя. Можно попробовать сделать фильтрацию по дате заказа, но это уже более сложный вариант, и не для этой статьи.
Но давайте поможем администратору, чтобы он не сидел перед таблицей и периодически проверял поступление заказа, а воспользовался тоже нашим приложением для контроля. Этим мы и займёмся в следующей части статьи.