[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: JS написать логику выбора времени аренды
AllesKlar
Похоливарили на сию тему, и я таки решил данный кусок переписать.
Писалось давно, многими дописывалось, куча костылей, хочу с чистого листа.

Итак имеем:
Внутри:
<input type='hidden' id='startstation' name='startstation'  data-stat='' value=''> // Филиал отправления String
<input type='hidden' id='endstation' name='endstation' data-stat='' value=''> // Филиал Прибытия String
<input type='hidden' id='startdatetime' name='startdatetime' value=''> // Timestamp отправления
<input type='hidden' id='enddatetime' name='enddatetime' value=''> // // Timestamp прибытия


Снаружи:
Список филиалов отправления, дата, время отправления.
Список филиалов прибытия, дата, время прибытия.

user posted image

user posted image

Глобальный флаг: шаг для Timepicker в минутах.
У каждого филиала есть расписание, может быть, может не быть обеденного перерыва.
У каждого филиала есть список филиалов, куда можно вернуться.
Вернуться в тот же самый филиал можно всегда.
У каждого филиала есть "время предзаказа", т.е. если время предзаказа 24 часа, то время отправления не може быть раньше, чем now() + 24 часа.
У каждого филиала есть параметр "регион" - географический код региона, где размещен филиал.
По данному параметру имеем список праздничных дней для филиала.
Для всех филиалов единый флаг: возможность отправления в любое время.
Если "возможность отправления в любое время" == true, то дата отправления - любая, время отправления 08:00 - 18:00, если false, то дата / время отправления только в рабочее время.
Для всех филиалов единый флаг: возможность вернуться в любое время.
Если "возможность вернуться в любое время" == true, то вернуться можно в любое время, если false, то только в рабочее время филиала.
Если "возможность отправления в любое время" == true, то "возможность вернуться в любое время" принудительно выставляется в true.

Если станция отправления не выбрана, то:
- возможность выбора станции прибытия заблокирована.
- автоматически выставляется дата/время отправления: Ближайшие 8 часов утра.
- минимальня дата/время отправления: Ближайшие 8 часов утра.
- доступное время отправления: 08:00 - 18:00
- минимальная дата прибытия = дата отправления
- выставленная автоматически дата прибытия = дата отправления + 1 день.

user posted image

- если дата прибытия == дате отправления, то минимальное время прибытия = следующее доступное время (учитывается флаг "шаг для Timepicker")

user posted image


Если станция отправления выбрана, то:
- возможность выбора станции прибытия разблокирована.
- дата / время отправления зависит от "возможность отправления в любое время", "время предзаказа", "рассписание филиала" именно в такой последовательности. Т.е. если "возможность отправления в любое время" == true, все остальное игнорируется.
- далее обычная человеческая логика:
-- дата / время прибытия не может быть раньше, чем дата / время отправления
-- если выбирается/изменяется дата/время отправления и дата/время прибытия были меньше, то дата прибытия меняется на следующий возможный день ("возможность вернуться в любое время", рассписание, выходные, праздники).
-- Datapicker даты отправления манипулирует значением MinDate Datapicker-а даты прибытия
-- Timepicker времени отправления манипулирует MinTime Timepicker-а времени прибытия


При выборе того или иного значения, прописывается соответсвующие значения в <input > элементы (указаны вверху)
Если при загрузке страницы <input id='startstation' уже имеет значение (код станции String) значит, филиал отправления должен быть автоматически выбран, филиал прибытия установлен тем же самым, Datepicker-ы и Tmepicker-ы выставлены в соответсвии с вышеописанной логикой, для всех остальных input-ов прописаны соответсвующие значения.

Все флаги уже имеются как JS переменные, все данные по филиам грузятся аяксом.
В качестве имитации базы будут предоставлены php скрипты, к которым можно будет обратиться по ajax и которые выплевывают данные по филиалам.

Старовая цена 30 Eur.
Срок до обеда 27.12.2015 (воскресенье)

Сегодня заглядывать буду редко, т.к у нас Рождество user posted image

_____________
[продано копирайтерам]
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.