ТЕХНИЧЕСКОЕ ЗАДАНИЕ на изменение функционала системы проводок заказов автозапчастей Глоссарий Бренд — марка производителя запчастей PO — идентификатор заказа, число-буквенный, нумерация сквозная в пределах одного бренда CL — идентификатор клиента, число-буквенный MID — идентификатор менеджера, число-буквенный Направление — термин, обозначающий группу дилеров Истории Пользователи Пользователи делятся на пассивных (не могут заказывать), активных (могут заказывать под собой), менеджеров (могут заказывать на других пользователей). Пользователи связаны между собой, так, чтобы можно было сопоставить некого менеджера с одним или несколькими пользователями. У каждого пользователя должен быть «создатель», однако другие менеджеры должны иметь возможность заказывать «чужих пользователей». В последствии, когда понадобится такая необходимость, можно будет сделать сортировку в связке *создательклиент* и *менежер_заказчик-клиент* и получить статистику. Получается что между пользователем и менеджером нет жёсткой связи, запрещающей другим менеджерам взаимодействовать с пользователем. Для первой очереди проекта: Любой менеджер сможет работать с любым клиентом. Клиенты могут только просмтриать состояние своих заказов. Управление – через админ панель. Справочник направлений Справочник направлений реализуется в коды. Справочник направлений должен быть расширен полем, хранящим буквенную часть PO для данного направления — данное расширение описывается в базе данных и может быть редактируемым из административной панели. Справочник брендов Справочник брендов должен быть связан со справочником направлений. Создание заказа менеджером Менеджер может оформить заказ на запчасти двумя способами: 1) ввод информации в форме с возможностью добавления рядов (как сейчас вводит клиент) 2) путем загрузки xls файла определенного формата 3) поиском запчасти через специальный интерфейс (см. п. Поиск запчасти) * Создание заказа через форму Форма представлена следующими полями: Название поля Тип поля BRAND Выпадающий Бренд** список PART # Текстовой ввод Описание Номер детали. COMENT 1 Произвольный текст – комментарий заказчика COMENT 2 Произвольный текст – комментарий для поставщика Q Текстовой ввод Количество ID Автоматическ ID менеджера ая подстановка — скрытое поле CL Выпадающий ID клиента список RUS Текстовая область Описание детали на русском языке. Вводится вручную ENG Текстовая область Описание детали на английском языке — вводится вручную LIST Текстовое поле - цифры Базовая Цена — вводится вручную PRICE Текстовое поле - цифры Цена продажи — вводится вручную Под таблицей - автоматически обновляемое поле TOTAL = сумма по всем колонкам произведения Q x PRICE При выборе запчасти через интерфейс поиска происходит заполнение нового ряда в форме по данным, полученным в результате поиска. ** Выбор бренда при ручном вводе формы. Выбор бренда осуществляется из справочника брендов. Список для выбора лимитируется выбранным направлением (если есть какие-либо бренды, связанные с этим направлением). Выбор осуществляется следующими способами: 1) поле с автодополнением 2) ссылка на всплывающее окно, где выводится полный список брендов для выбранного направления (если можно осуществить такой фильтр), либо выводятся все бренды. Можно сделать постраничный вывод с поиском. При клике на направление, значение добавляется в поле ряда формы и всплывающее окно закрывается. 3) Пользователь может ввести новый бренд, если не может найти тот, который ему нужен. При этом бренд сохраняется со статусом «Нужно проверить». Этот статус должен визуально показываться менеджеру, обрабатывающему заказ. Менеджер может принять вновь введенный бренд, или отредактировать его. При редактировании временный бренд удаляется. Создание заказа через загрузку файла Структура колонок файла соответствует форме ввода. Все значения вводятся вручную. При обработке файла производится проверка на правильность написания бренда в соответствии со справочником. Если написано не правильно — файл отвергается с выводом сообщения об ошибке и указанием на нее. Интерфейс поиска запчастей Нужно реализовать интерфейс, работающий как тот, что сейчас существует на сайте automototrade.com в разделе Каталог. Поиск производится по бренду и номеру запчасти. Форма поиска появляется во всплывающем окне. При нахождении данных выводится строка таблицы и кнопка «Добавить в заказ» Для части брендов и номеров могут быть замены. Для таких случаев нужно выволидь найденную позицию для заказа, но также продолжать поиск до тех пор, пока не будет возвращено пустое значение. Все дополнительно найденные ряды нужно показывать под найденным рядом, но при этом писать, что в дальнейшем возможна замена на другие запчасти. Справочник таких частных случаем брендов и номеров должен хранится в файле настроек. Для клиента Для клиента этот интерфейс также доступен, но только как справочник. При показе цены выводится цена со скидкой в следующем виде: Цена Ваша цена Вы экономите БАЗОВАЯ_ЦЕНА* + 10% (БАЗОВАЯ_ЦЕНА + 10%) СКИДКА_КЛИЕНТА** % Разница — в абс. ед. ($)и % * --- цена, которую возвращает скрипт ** --- см. раздел «Скидки клиентам» Техническая реализация технически данный справочник может быть реализован двумя способами: 1) Реализовать REST интерфейс к существующему скрипту на automototrade.com. Передаем бренд и номер запчасти, получаем JSON с данными. 2) Переписать скрипт для интеграции с данным проектом. Сохранение данных заказа после обработки формы или файла Данные сохраняются в базу данных. Каждая позиция заказа связывается с менеджером, а также с пользователем, для которого сделан заказ. Скидки клиентам Реализуются группы, к которым можно отнести того или иного клиента. Каждой группе можно назначить скидку в % Первая версия Скидки реализуются только при заказе по направлению OEM, т. е. При заказе через Интерфейс поиска. Если заказ делает менеджер, то считать эту скидку не нужно. На данном этапе менеджер самостоятельно выставляет ценник. Либо из файла, либо вручную Работа с введенными заказами. Для работы с введенными заказами предполагается интерфейс, похожий на существующий. Состав колонок: Имя Редактируется Описание PO - PO — для необработанного заказа — это PO для бренда без номера. Для позиции, отправленной диллеру — это PO с номером данного заказа. Буквенная часть PO выставляется в зависимости от направления Поставщик - Направление заказа BRAND - Бренд PART # + Номер COMMENT + Поле, кот. заполнит менеджер. Должна быть возможность «горячего» редактирования данного поля Q - Количество PRICE IN + Цена из инвойса от поставщика, вводится на этапе получения инвойса (пока вручную) TOTAL W SHIP ? TOTAL, как в таблице снизу. Рассчитывается путём перемножения кол-ва на цену ЗАМЕНА + Номер замены, логика такая же, как сейчас ID - ID менеджера RUS + Русское описание ENG + Английское описание LIST + Поле LIST из формы ввода WEIGHT + Вводится вручную — это вес для одной детали ДОСТАВКА - рассчитывается как WEIGHT*Const , где Const своя для каждого направления, и может быть изменена для каждого CL индивидуально и для каждой конкретной поставки, т.е. расчёт идёт от значения конкретной ячейки. PRICE ? Цена из колонки PRICE формы ввода/файла; если поле пустое, заполняется вручную NEW PRICE + Цена продажи со скидкой, вводится вручную. COST - ДОСТАВКА+ PRICE если нет NEW PRICE ИЛИ ДОСТАВКА+ NEW PRICE если есть NEW PRICE TOTAL COST *new - COST*Q PO DIRECT BRAND PART # sp moto TR COMMENT1 COMMENT2 Q PRICE IN TOTAL ЗАМЕНА ID 33-6633 срочно заказано 2 CL RUS ENG LIST ВЕС СТОИМ ДОСТАВКА PRICE NEW PRICE ДОСТ VS001 Mi003 подножка pad 35 38 COST новый получено в заказ в работе получено поставщиком PO DIRECT BRAND PART # sp moto TR 33-6633 срочно PO DIRECT BRAND PART # sp moto TR COMMENT1 COMMENT2 Q PRICE IN TOTAL ЗАМЕНА ID заказано 2 26.25 52.5 заказано 2 26.25 52.5 RUS ENG LIST ВЕС СТОИМ ДОСТАВКА PRICE NEW PRICE ДОСТ VS001 Mi003 подножка pad COMMENT1 COMMENT2 Q PRICE IN TOTAL ЗАМЕНА ID 33-6633 срочно CL CL RUS 35 35 0.2 отправлено 38 ENG LIST ВЕС СТОИМ ДОСТАВКА PRICE NEW PRICE ДОСТ VS001 Mi003 подножка pad COST 13 2.6 38 поставщиком COST получено 40.6 Следует сделать возможность выводить на экран «помеченные» столбцы для различных категорий пользователей (менеджеры, клиенты итд). Настраиваться должно шаблоном (например для менеджера 2,3,4,5,6,9,10,11,12,13,14,15 итд), но чтобы каждому персонально можно было бы добавить что-то или что-то убрать. ________________________________________________________________________________________________________________________________ Роли администраторов Admin — может все Supervisor — заказы, редактирование, отправка Minivisor — заказы, ограничения по цене, создание клиентов Роли клиентов Superclient — отправка заказов, просмотр (не реализуется) Client — просмотр Поставщик - направления OEM - US AFTMARK - US MOTO - US ONLINE - US EXAP - MSK DOCAP - MSK DOCVP - MSK Справочник направлений реализуется в коде (например, в файле настроек). Связанные c направлениями сущности можно будет редактировать и привязывать к направлениям (их список должен быть доступен для выбора из него в админке). Логика отправки заказа для направления US Интерфейс тот же, что и есть - "По группам". Выводятся позиции со статусом "Новый заказ". Следующий по счёту PO (свой для каждого направления) получает та группа, которая ушла в заказ первой + у каждого направления свои PO. ВАЖНО: «ПО ГРУППАМ» разбиваются только американские направления. Российские пусть пока валятся в одну кучу. Например, первый отправленный заказ (направл OEM.брэнд mopar) уйдёт с PO=SP564, второй отправленный заказ (направл EXAP, без сортировки по брэндам) уйдёт с PO=SPD003, третий отправленный заказ (направл DOCAP, без сортировки по брэндам) уйдёт с PO=SPX003, четвертый отправленный заказ с направлением OEM, бренд Mazda уйдет с PO = SP565 Для каждой группы возможна отдельная отправка. Оправляются позиции, у которых статус был изменен на "Получено в заказ" Отправка 1) Для направления US - формирование файла определенной структуры и передача его по протоколу SOAP на веб-сервис дилера. Нужна структура для отправки, а также URL и необходимые параметры запроса. Еще раз хочу уточнить - в первой версии мы говорим только про отправку? Отслеживание состояния и т.д. - на следующие этапы, так? 2) Для остальных напрвлений - отправка на указанный в настройках почтовый адрес письма со списком позиций. По факту отправки все позиции, вошедшие в данный бренд, помечаются одним PO. Этот PO формируется как XXXYYY: Буквенная часть (XXX) - PO для соответствующего направления. Числовая часть (YYY)- порядковый номер для данного для данной отправки Журнал изменений статуса заказа Для каждой позиции ведется журнал, в котором фиксируются изменения статуса позиции - указывается дата изменения, пользователь, а также старое и новое значение статуса.. Статусы заказа НОВЫЙ ЗАКАЗ Позиция добавлена в базу. никаких действий не производилось. СТАТУС появляется после заказа менджером или клиентом ПОЛУЧЕНО В ЗАКАЗ Позиция отправлена в заказ. СТАТУС появляется после отправки заказа поставщику В РАБОТЕ Позиция получена в заказ поставщиком. СТАТУС появляется после изменения состояния поставщиком ОТКАЗ Отказ в поставке. Остановка заказа СТАТУС появляется после изменения состояния поставщиком или вручную НЕКОРРЕКТНЫЙ НОМЕР Некорректный номер. Остановка заказа СТАТУС появляется после изменения состояния поставщиком или вручную ОТСУТСТВУЕТ НА СКЛАДЕ По факту выяснилось отсутствие на складе. Остановка заказа СТАТУС появляется после изменения состояния поставщиком или вручную ЗАМЕНА НОМЕРА Замена номера повлекла значительное повышение цены. Остановка заказа. СТАТУС изменяется вручную. BACK ORDER Позиции нет на складе. Увеличение срока поставки. Заказ в работе. СТАТУС появляется после изменения состояния поставщиком ПОЛУЧЕНО ПОСТАВЩИКОМ Позиция получена поставщиком. СТАТУС появляется после изменения состояния поставщиком или вручную В ДОСТАВКЕ Позиция отправлена поставщиком. СТАТУС появляется после изменения состояния поставщиком или вручную ПОЛУЧЕНО НА СКЛАД Позиция получена на склад в Москве. СТАТУС появляется после изменения состояния поставщиком или вручную ОТПРАВЛЕНО ПРЕДСТАВИТЕЛЮ Позиция принята перевозчиком. СТАТУС появляется после изменения состояния поставщиком или вручную ПОЛУЧЕНО ОФИСОМ Позиция получена по факту в Минске. СТАТУС изменяется после внесения веса детали или вручную ВЫДАНО Позиция списана со склада в Минске и выдана клиенту. СТАТУС изменяется вручную В любом случае все статусы будут изменяться и программно и вручную, но пока что-то не реализовано, всегда остаётся ручной вариант. Возможно появятся какие-то ещё статусы, поэтому нужно делать с перспективой добавления/изменения/удаления каких-то статусов. Сейчас делаем максимальный функционал по поставщикам US. Поэтому всё, что относится к RU, будет делаться пока вручную.