Краткая инструкция по конфигурации проекта и созданию сборки

 

1. Краткая инструкция по конфигурации проекта

Настройка файла опций

  1. С корневой папки MySales необходимо перейти в папку config и создать файл
    options_[name].json5 , где [name] - название проекта;

  2. Копируем стандартную заготовку файла опций (с м. Приложение) в созданный
    файл с заменой [name] на название проекта;

  3. В поле db_interface вписываем используемый драйвер БД:
    a. './DbMysql' - драйвер для MySql;
    b. './DbMssqlNew' - драйвер для MSSql;
    c. './DbOracle' - драйвер для БД Oracle;
    d. './DbPostgresql' - драйвер для PostgreSql.

  4. В поле connection заполняем необходимые параметры для подключения к БД
    исходя из образцов ( см. Приложение );

  5. В поле weather.location удаляеме коды городов, которые не используются
    клиентом;

  6. В поле end_week устанавливаем максимально доступную неделю если
    пилотный проект или 0 если продуктив;

  7. В поле start_week устанавливаем минимальную (самую ранюю) историческую
    неделю;

  8. Если Клиент имеет больше одного региона, то необходимо параметру
    use_all_region присвоить значение true иначе false .

  9. Сохраняем файл.

Настройка файла SQL запросов

1. С корневой папки MySales необходимо перейти в папку config и создать файл
sql_[name].ini , где [name] - название проекта;

2. Записываем в файл основные SQL запросы следующего предназначения
(форма записи SQL запроса см. Приложение ):

Название запроса

Описание запроса

Название запроса

Описание запроса

all_stores

Возвращает следующие поля:

  1. Номер магазина NUM;

  2. Название магазина NAME;

  3. Номер региона магазина
    REGION;

  4. Код погодного региона
    WEATHER.

Отсортированные в порядке
возрастания номера региона и
номера магазина.

Пример запроса:

SELECT STORE_ID NUM, STORE_NAME NAME,REGION_ID REGION, WEATHER_CODE WEATHERFROM STORES ORDER BY REGION_ID, STORE_ID

all_regions

Возвращает следующие поля:

  1. Номер региона NUM;

  2. Название региона NAME;

  3. Код погодного региона
    WEATHER.
    + строка общего (нулевого) региона.

Пример запроса:

SELECT '0' NUM, 'All' NAME, null WEATHERUNION ALLSELECT REGION_ID NUM, NAME NAME, WEATHER_CODE WEATHERFROM REGIONS

all_groups

Возвращает следующие поля:

  1. Номер группы GRP;

  2. Название группы NAME.

Отсортированные в порядке
возрастания номера группы.

Пример запроса:

SELECT GROUP_ID GRP, NAME NAME FROM GROUPS ORDER BY GROUP_ID

sku_group

Возвращает следующие поля:

  1. Номер Sku SKU;

  2. Название Sku NAME;

  3. Номер группы GRP.
    С возможностью передачи
    следующих параметров (о передаче
    параметров см. Приложение ):

  4. Номер Sku - [sku_list];

  5. Номер группы - [group_list];

  6. Номер поставщика -
    [supplier_list].

Отсортированные в порядке
возрастания номера группы и номера
Sku.
Пример запроса:

all_suppliers

Возвращает следующие поля:

  1. Номер поставщика NUM;

  2. Название поставщика NAME.
    Отсортированные в порядке
    возрастания по названию
    поставщика.

Пример запроса:

3. Записываем в файл предопределение переменных “price_disc” и
“price_disc_sum” в следующем виде:

  1. {price_disc}
    case when [ sales volume] = 0 then null else ( [ sales value] +
    [discount value] ) / [sales volume] end PRICE,
    case when [ sales volume] = 0 then 0 else [ discount value] / [ sales
    volume] end DISC

  2. {price_disc_sum}
    case when sum([ sales volume]) = 0 then null else sum ( [ sales
    value] + [discount value] ) / sum( [sales volume] ) end PRICE,
    case when sum([ sales volume]) = 0 then 0 else sum([ discount
    value] ) / sum( [sales volume] ) end DISC


    Квадратные скобки необходимо заменить на соответствующие им поля в БД.

4. Записываем в файл основные SQL запросы по загрузке продаж(форма записи
SQL запроса см. Приложение ):

Название запроса

Описание запроса

Название запроса

Описание запроса

sales_by_group_store

Возвращает следующие поля:

  1. Номер магазина STORE;

  2. Неделя WEEK;

  3. Кол-во позиций на остатке в
    группе CNT;

  4. Остатки по группе STOCK;

  5. Продажи по группе SALES;

  6. {price_disc}.

С возможностью передачи
следующих параметров (о передаче
параметров см. Приложение ):

  1. Номер магазина - [store_list];

  2. Номер группы - :group;

  3. Первая неделя - :start_week;

  4. Последняя неделя -
    :end_week.

Пример запроса:

sales_sum_stores_sum_groups

Возвращает следующие поля:

  1. Неделя WEEK;

  2. Сумма кол-ва позиций на
    складе по группе CNT;

  3. Сумма остатков по группе
    STOCK;

  4. Сумма продаж по группе
    SALES;

  5. {price_disc_sum}.

С возможностью передачи
следующих параметров (о передаче
параметров см. Приложение ):

  1. Первая неделя - :start_week;

  2. Последняя неделя -
    :end_week.

Группирование по полю Недели.

Пример запроса:

sales_by_stores_sum_groups

Возвращает следующие поля:

  1. Номер магазина STORE;

  2. Неделя WEEK;

  3. Сумма кол-ва позиций на
    складе по группе CNT;

  4. Сумма остатков по группе
    STOCK;

  5. Сумма продаж по группе
    SALES;

  6. {price_disc_sum}.

С возможностью передачи
следующих параметров (о передаче
параметров см. Приложение ):

  1. Номер магазина - [store_list];

  2. Первая неделя - :start_week;

  3. Последняя неделя -
    :end_week.

Группирование по полям: Номер
магазина; Неделя.
Пример запроса:

sales_by_group_sum_stores

Возвращает следующие поля:

  1. Неделя WEEK;

  2. Сумма кол-ва позиций на
    складе по группе CNT;

  3. Сумма остатков по группе
    STOCK;

  4. Сумма продаж по группе
    SALES;

  5. {price_disc_sum}.

С возможностью передачи
следующих параметров (о передаче
параметров см. Приложение ):

  1. Номер группы - :group;

  2. Первая неделя - :start_week;

  3. Последняя неделя -
    :end_week.

Группирование по полям: Номер
группы; Неделя.
Пример запроса:

sales_by_sku_store

Возвращает следующие поля:

  1. Номер Sku SKU;

  2. Номер магазина STORE;

  3. Неделя WEEK;

  4. Остатки по Sku STOCK;

  5. Продажи по Sku SALES;

  6. {price_disc}.

С возможностью передачи
следующих параметров (о передаче
параметров см. Приложение ):

  1. Номер магазина - [store_list];

  2. Номер Sku - :[sku_list];

  3. Первая неделя - :start_week;

  4. Последняя неделя -
    :end_week.

Пример запроса:

sales_by_sku_sum_stores

Возвращает следующие поля:

  1. Номер Sku SKU;

  2. Неделя WEEK;

  3. Кол-во записей CNT;

  4. Сумма остатков по Sku
    STOCK;

  5. Сумма продаж по Sku SALES;

  6. {price_disc_sum}.

С возможностью передачи
следующих параметров (о передаче
параметров см. Приложение ):

  1. Номер группы - :[sku_list];

  2. Первая неделя - :start_week;

  3. Последняя неделя -
    :end_week.
    Группирование по полям: Номер Sku;
    Неделя.

Пример запроса:

5. Сохраняем файл.

 

Настройка директории

  1. Открываем корневую папку MySales в командной строке (терминале) и
    прописываем следующую команду для создания директории проекта:
    mkdir data/data_ [name]
    где [name] - название проекта;

  2. Далее прописываем команду для создания лицензионного файла:
    node util/generate_keys.js options_ [name] .json5
    где [name] - название проекта;

  3. В созданную директорию mysales/data/data_ [name] копируем файлы с историей
    курса доллара (currency_rate.json) и погоды (weather.json).

Настройка сборщика

  1. С корневой папки MySales необходимо перейти в папку dist и создать файл
    update_[name].sh , где [name] - название проекта;

  2. Заполнить файл по примеру:



    где [name] - название проекта; "

  3. С корневой папки MySales необходимо перейти в папку util и открыть файл
    make.sh ;

  4. Перед записью echo Completed необходимо вставить запись для сборки
    проекта:

где [name] - название проекта, [db_interface] - драйвер БД:

a. ./DbMysql - драйвер для MySql;
b. ./DbMssqlNew - драйвер для MSSql;
c. ./DbOracle - драйвер для БД Oracle;
d. ./DbPostgresql - драйвер для PostgreSql.

5. Сохраняем файл.

2. Краткая инструкция по созданию сборки

При создании сборки проекта можно выделить следующие этапы:

  1. Создание сборки;

  2. Обновление конфигурационных файлов (необходим только после создания
    первой сборки по проекту);

  3. Установка сборки.

Создание сборки

  1. Открываем корневую папку MySales в командной строке (терминале) и
    прописываем следующую команду для создания директории проекта:
    util/make.sh

  2. Ожидаем окончания создания сборок по всем проектам;

  3. Сборки хранятся в хранилище на Dropbox в папке MySalesDist .

Обновление конфигурационных файлов

  1. Открываем папку MySalesDist на Dropbox;

  2. Предоставляем доступ по ссылке файлу mysales_ [name] .zip , где [ name] -
    название проекта.

  3. Копируем ссылку доступа и вставляем её в:
    a. файл опций options_ [name] .json5 в поле updater.optArchUrl;
    b. файл обновления update_ [name] .sh в поле wget "[ link]" -O
    mysales_ [name] .zip
    где [name] - название проекта,
    [link] - ссылка.

Примечание: если ссылка заканчивается на “0”, в файлах опций и обновления “0”
необходимо заменить на “1”.

Установка сборки

  1. Открываем папку MySalesDist на Dropbox;

  2. Скачиваем файлы:
    a. mysales.zip;
    b. mysales_ [name] .zip, где [name] - название проекта.

  3. Разархивируем скачанные файлы, после удаляем файлы.

  4. Перемещаем файлы с папки mysales и mysales_ [name] (где [ name] - название
    проекта) в одну папку и открываем ее в командной строке (терминале);

  5. Выполняем команду: npm i ;

  6. Установка сборки завершена, для запуска MySales необходимо открыть папку с
    файлами MySales в командной строке (терминале) и выполнить команду: node
    app .

3. Дополнительная конфигурация

Добавление ассортиментной матрицы

  1. Открываем файл конфигурации проекта;

  2. В поле loader добавляем свойство load_range_days со значением N (кол-во
    последних дней, за которые загружаются цены, по умолчанию 365);

  3. В поле default_predictors добавляем новый предиктор 'assrt' ;

  4. Сохраняем файл конфигураций;

  5. Открываем файл Sql запросов;

  6. Добавляем следующий Sql запрос:

Название запроса

Описание запроса

Название запроса

Описание запроса

ranges_by_sku_store

Возвращает следующие поля:

  1. Номер Sku SKU;

  2. Номер магазина STORE;

  3. Неделя ввода позиции в
    ассортимент в магазине
    STARTW;

  4. Неделя вывода позиции из
    ассортимента в магазине
    ENDW.

С возможностью передачи следующих параметров:

  1. Список магазинов - [store_list];

  2. Список Sku - [sku_list];

  3. Дата проверки - :end_date.

Пример запроса:

7. Сохраняем файл Sql запросов.

Добавление цен

  1. Открываем файл конфигурации проекта;

  2. В поле loader добавляем свойство load_price_days со значением N (кол-во
    последних дней, за которые загружаются цены, по умолчанию 365);

  3. Сохраняем файл конфигураций;

  4. Открываем файл Sql запросов;

  5. Добавляем следующий Sql запрос:

Название запроса

Описание запроса

Название запроса

Описание запроса

price_by_sku_store

Возвращает следующие поля:

  1. Номер Sku SKU;

  2. Номер ценового региона PRL;

  3. Цена PRICE;

  4. Дата ввода цены (формат
    даты YYYY-MM-DD) STARTD;

  5. Дата вывода цены (формат
    даты YYYY-MM-DD) ENDD.

С возможностью передачи
следующих параметров:

  1. Список магазинов - [store_list];

  2. Список Sku - [sku_list];

  3. Дата проверки - :start_date.

Пример запроса:

6. В Sql запрос all_stores необходимо добавить поле вывода ценового региона
PRL.
Пример запроса:

7. Сохраняем файл Sql запросов.

4. Приложение

Стандартный файл опций

Стандартный файл опций находится в директории MySales по пути
config/docs/options_[name].json5 .

Настройки подключения к БД

MySql
MSSql
Azure Sql
Oracle
PostgreSql

Форма записи SQL запроса

Переменные в SQL запросе

MySales поддерживает передачу переменных двух видов:

  1. содержащая одно значение;

  2. содержащая список значений.
    Первый вид используется следующим способом:
    WHERE COLUMN_NAME = :variable_name
    Если тип значения переменной string, то запись переменной имеет следующий вид:
    WHERE COLUMN_NAME = “:variable_name”
    При использовании второго вида переменной запись выглядит:
    WHERE COLUMN_NAME [variable_name]
    Если тип значения переменной string, то запись переменной имеет следующий вид:
    WHERE COLUMN_NAME “[variable_name]”

 

5. Начальные файлы конфигурации

Доступ пользователей к страницам регулируется только в режиме локальной секьюрити в настройках пользователей под ключом accessByPage

allow {Array} определяет список видимых в меню и доступных страниц, будут видны только они.
forbid {Array} определяет список исключенных из видимых страниц. Остальные будут видны.
Чтобы внести страницу в список, необходимо записать её в массив в виде строки ‘/path_to_page’ , причем путь должен быть односложным, т.е. не /path1/path2 и т.п.

Что надо помнить: доступ через accessByPage регулирует только доступ к рендеру страниц, но не к api.
Неоторые группы страниц имеют составной путь. Например, /promo/match.
Не все возможные страницы видны в меню. Например, тот же /promo/match не виден.

Для разрешения/запрещения доступа к группе страниц под одним корневым роутом, достаточно указать корневой путь. Например, /promo .

Видимость в меню регулируется в файле views/header.inc.jade через isDisplay(), и надо следить, чтобы пути там совпадали с вызываемыми.

Также надо помнить, что в текущей архитектуре роутер передает на isLoggedInRoute ссылку с уже отрезанной базой. Это усложняет логику обработки корневой '/',

В дальнейшем надо решить, как регулировать доступ к группам страниц, типа replenishment. Поскольку перечислять все для контроля доступа неэффективно, + если мы добавляем новые страницы это ведет за собой необходимость делать апдейт политик пользователей.

 

(c) MySales Labs Ltd
Единственным и исключительным владельцем программного обеспечения MySales, данной документации и других связанных с MySales сопроводительных материалов, является MySales Labs Ltd