Это тестовое задание не имеет никаких технических ограничений. Ты можешь использовать любые инструменты.
После успешной покупки билетов на событие, данные попадают в список заказов. Список заказов сохраняется в таблице phpMyAdmin в виде:
id | event_id | event_date | ticket_adult_price | ticket_adult_quantity | ticket_kid_price | ticket_kid_quantity | barcode | user_id | equal_price | created |
---|---|---|---|---|---|---|---|---|---|---|
1 | 003 | 2021-08-21 13:00:00 | 700 | 1 | 450 | 0 | 11111111 | 00451 | 700 | 2021-01-11 13:22:09 |
2 | 006 | 2021-07-29 18:00:00 | 1000 | 0 | 800 | 2 | 22222222 | 00364 | 1600 | 2021-01-12 16:62:08 |
3 | 003 | 2021-08-15 17:00:00 | 700 | 4 | 450 | 3 | 33333333 | 00015 | 4150 | 2021-01-13 10:08:45 |
Где:
id
- инкрементальный порядковый номер заказаevent_id
- уникальный ид события. У каждого события есть свое название, описание, расписание, цены и свой уникальныйevent_id
соответственноevent_date
- дата и время на которое были куплены билетыticket_adult_price
- цена взрослого билета на момент покупкиticket_adult_quantity
- количество купленных взрослых билетов в этом заказеticket_kid_price
- цена детского билета на момент покупкиticket_kid_quantity
- количество купленных детских билетов в этом заказеbarcode
уникальный штрих код заказаequal_price
- общая сумма заказаcreated
- дата создания заказа
Вопросы:
- Некоторые события нужно продавать с дополнительными типами билетов - льготный и групповой, у которых будут свои цены и название. Имеется информация, что вероятно, будут другие типы билетов, которые нужно будет добавить. Нужно уметь сохранять при заказе 2 дополнительных типа билета, льготный и групповой в бд. Задача - Показать конечный вид таблицы с добавленными типами билетов. Объяснить свое решение.
Ответ -
id | event_id | event_date | ticket_adult_price | ticket_adult_quantity | preferential_ticket_adult_price | preferential_ticket_adult_quantity | ticket_kid_price | ticket_kid_quantity | preferential_kid_price | preferential_ticked_kid_quantity | group_ticket_price | group_ticket_quantity | barcode | user_id | equal_price | created |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1 | 003 | 2021-08-21 13:00:00 | 700 | 1 | 400 | 1 | 450 | 0 | 250 | 1 | null | 0 | 11111111 | 00451 | 1350 | 2021-01-11 13:22:09 |
2 | 006 | 2021-07-29 18:00:00 | 1000 | 0 | null | 0 | 800 | 2 | null | 0 | 2500 | 2 | 22222222 | 00364 | 6600 | 2021-01-12 16:62:08 |
3 | 003 | 2021-08-15 17:00:00 | 700 | 4 | 400 | 2 | 450 | 3 | 250 | 2 | null | 0 | 33333333 | 00015 | 5450 | 2021-01-13 10:08:45 |
Льготные билеты могут быть как для взрослых так и для детей, поэтому я добавила столбцы с ценами и количеством билетов отдельно для взрослых и отдельно для детей. Групповые билеты я не стала разделять на детские и взрослые. Для определенного события может не быть какого либо из дополнительных типов билетов, поэтому, если в событии нет какого-либо доп.типа, я указала в колонке с ценой null, т.е. нет цены.
- Часто посетители из одного заказа приходят не одновременно на события. Возникает необходимость чекинить их по отдельности. Для этого у каждого билета должен быть свой баркод. Если в одном заказе было куплено несколько билетов, 2 взрослых, 3 детских, 4 льготных - то должно быть 9 баркодов для каждого билета соответственно. Задача - Показать конечный вид таблицы, где у каждого билета свой баркод. Объяснить свое решение.
id | event_id | event_date | ticket_adult_price | ticket_adult_quantity | ticket_adult_barcodes | preferential_ticket_adult_price | preferential_ticket_adult_quantity | preferential_ticked_adult_barcodes | ticket_kid_price | ticket_kid_quantity | ticked_kid_barcodes | preferential_kid_price | preferential_ticked_kid_quantity | preferential_ticked_kid_barcodes | group_ticket_price | group_ticket_quantity | group_ticked_barcodes | barcode | user_id | equal_price | created |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1 | 003 | 2021-08-21 13:00:00 | 700 | 1 | 12121212 | 400 | 1 | 15151515 | 450 | 0 | null | 250 | 1 | 22222222 | null | 0 | null | 11111111 | 00451 | 1350 | 2021-01-11 13:22:09 |
2 | 006 | 2021-07-29 18:00:00 | 1000 | 0 | null | null | 0 | null | 800 | 2 | 17171717, 18181818 | null | 0 | null | 2500 | 2 | 25252525, 26262626 | 22222222 | 00364 | 6600 | 2021-01-12 16:62:08 |
3 | 003 | 2021-08-15 17:00:00 | 700 | 4 | 13131313, 14141414, 15151515, 16161616 | 400 | 2 | 16161616, 17171717 | 450 | 3 | 19191919, 20202020, 21212121 | 250 | 2 | 23232323, 24242424 | null | 0 | null | 33333333 | 00015 | 5450 | 2021-01-13 10:08:45 |
Ответ - Здесь я добавила дополнительные колонки с баркодами для каждого типа билетов. В случае, если по какому-либо типу не было куплено ни одного билета, то я в графе с баркодами указывала null.
Известно расписание отправления теплохода по московскому времени (GMT+3):
-
из A в B:
- 2021-08-21 18:00:00
- 2021-08-21 18:30:00
- 2021-08-21 18:45:00
- 2021-08-21 19:00:00
- 2021-08-21 19:15:00
- 2021-08-21 21:00:00
-
из B в A:
- 2021-08-21 18:30:00
- 2021-08-21 18:45:00
- 2021-08-21 19:00:00
- 2021-08-21 19:15:00
- 2021-08-21 19:35:00
- 2021-08-21 21:50:00
- 2021-08-21 21:55:00
"из A в B" и "из B в A" стоимость одного билета 700р.
"из A в B и обратно в А" стоимость составного билета 1200р
Время пути в одну сторону 50 минут.
Задача. Сделать страницу (дизайн не имеет значения) на которой пользователь выбрав направление, время и количество билетов сможет посчитать итоговые значения: общую стоимость, время в пути.
Как это должно выглядеть?
На странице пользователь сначала должен выбрать направление:
<select name="route" id="route">
<option value="из A в B">из A в B</option>
<option value="из B в A">из B в A</option>
<option value="из A в B и обратно в А">из A в B и обратно в А</option>
</select>
После чего предлагается пользователю выбрать время. Важно, время показываем в часовом поясе пользователя. Предположим, что на всех его устройствах стоит запрет перевода времени в локальный часовой пояс.
<label for="time">Выберите время</label>
<select name="time" id="time">
<option value="18:00(из A в B)">18:00(из A в B)</option>
<option value="18:30(из A в B)">18:30(из A в B)</option>
<option value="18:45(из A в B)">18:45(из A в B)</option>
<option value="19:00(из A в B)">19:00(из A в B)</option>
<option value="19:15(из A в B)">19:15(из A в B)</option>
<option value="21:00(из A в B)">21:00(из A в B)</option>
<option value="18:30(из B в A)">18:30(из B в A)</option>
<option value="18:45(из B в A)">18:45(из B в A)</option>
<option value="19:00(из B в A)">19:00(из B в A)</option>
<option value="19:15(из B в A)">19:15(из B в A)</option>
<option value="19:35(из B в A)">19:35(из B в A)</option>
<option value="21:50(из B в A)">21:50(из B в A)</option>
<option value="21:55(из B в A)">21:55(из B в A)</option>
</select>
Если выбрано время "из A в B и обратно в А", то должен показаться дополнительный селект, в котором можно будет выбрать обратное время. Обратите внимание, что время не должно пересекаться. Это значит, что следует учитывать, что если путь из А в В был выбран в 14:00, то обратный путь возможен только по прибытию на место в пункт В.
Далее ползователю прелагается выбрать количество билетов и нажать на кнопку "посчитать".
<label for="num">Количество билетов</label>
<input id="num">
<button>Посчитать</button>
При клике на кнопку "Посчитать" показать результат с направлением, временем в пути, временем отправления и временем прибытия в часовом поясе пользователя.
Например:
Вы выбрали 4 билета по маршруту из A в B стоимостью 4000р.
Это путешествие займет у вас 40 минут.
Теплоход отправляется в 12-00, а прибудет в 18-00.