Skip to main content

v1.13.0

Авторизация 

Убрать зависимость логина от регистра (во время авторизации) (поменяй название фичи на более пользовательское) 

Коллеги, мы сейчас будем заливать апдейт по учеткам пользователей на dev4:
Цель – избавиться от привязки к регистру у логинов.
Проблема – существующие логины могут задублироваться (например, test и Test), поэтому при нахождении повтора система автоматически добавит ему префикс вида "d1", "d2". Будьте готовы к этому изменению и при наличии возможности проверьте свою учетную запись на dev4 – попытайтесь войти со своими логином и паролем (в случае неудачи попробуйте варианты "d1_<Логин>", "d2_<Логин>" и т.д.) 

Добавить проверку сложности пароля (поменяй название фичи на более пользовательское) 

Для безсопасности регистрации пользователя система дает знание о качестве пароля и выводит ошибку если не соблюдаются условия: 8 символов, сторочные и прописные, символы. 

Менеджер проектов

МХ

Создание АавтоДдокументацияи по проекту 

Бизнес-требования

  • "Создать автодокументацию" – вызывается из контекстного меню проекта в менеджере
  • Создавать текстовый файл автодокументации (можно в PDF, можно в htm, можно в любом другом формате, хоть в Excel):
    1. Модель (таблица такая по полю такому связана с другой так-то и так-то) и источники проекта (название источника, расписание его обновления и SQL к этому источнику)
    2. Страницы (список страниц названиями, их статус – скрыто/открыто) и RLS (если есть, то списком – кому запрещено плюс идентификацию: группа/пользователь)
    3. Расчеты (таблица – название страницы, название таблицы, SQL-код таблицы)

Общее описание

Таблицы с данными:

  1. Список страниц
  2. Список виджетов с расчётами
  3. Список источников
  4. Список моделей данных
  5. Список правил RLS

Доступ к функциональности открыт только для пользователей с ролями "Админ" и "Разработчик" 

Наполнение документа

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

  • Страницы проекта
  • Визуализации проекта
  • Источники данных
  • Модели данных
  • Ограничения RLS
  • Скрипт загрузки
Страницы проекта

В разделе располагается ровно одна таблица без названия

Список столбцов:

  • Название страницы
  • Ширина
  • Высота
  • Изображение на фоне
  • Видимость
  • PLS
  • ID

Логика:

  • Для изображения на фоне указывается ссылка на изображение (при наличии, при отсутствии пишется null)
  • Видимость 2 видов: "Скрыто", если страница скрыта из навигации, и "Открыто", если страница видима
  • PLS – ограничения в доступе к странице, перечисляются все пользователи, которым ограничен доступ к странице (null, если таких нет)
  • ID – идентификатор страницы
Визуализации

В разделе располагается столько таблиц, сколько страниц есть в проекте

Название каждой таблицы: "Визуализации на странице <Название_страницы>"

Список столбцов:

  • Тип визуализации
  • Название визуализации
  • X
  • Y
  • Z
  • Ширина
  • Высота
  • Видимость
  • Блокировка
  • ID
  • Модель данных
  • SQL-код

Логика:

  • Тип визуализации соответствует названию по умолчанию виджета без цифр (например, Линейная диаграмма)
  • Название – то, которое дал пользователь
  • Z – определяет уровень виджета, где 1 – самый низ, далее выше по Z-слою
  • Видимость 2 видов: "Скрыто" и "Открыто"
  • Блокировка 2 видов: "Заблокировано" и "Разблокировано"
  • ID – идентификатор виджета
  • Модель данных – название модели, используемой для виджета
  • SQL-код – итоговый код для формирования виджета; если включены виртуальные данные, то писать "Виртуальные данные"
Источники

В разделе располагается ровно одна таблица без названия

Список столбцов:

  • Название источника
  • Подключенные таблицы
  • Задание на обновление
  • График запуска

Логика:

  • Подключенные таблицы писать списком через запятую в одной ячейке для каждого источника
  • Задание на обновление 2 видов: "Активно" (если есть задание и оно активно) и "Неактивно" (если нет задания или оно неактивно)
  • График обновлений содержит в себе крон-задание на обновление источника текстом (как в панели администратора, например 0 0 15 * *)
Модели данных

В разделе располагается столько таблиц, сколько моделей данных есть в проекте

Название каждой таблицы: "Связи модели <Название_модели_данных>"

Список столбцов:

  • Из таблицы
  • Из столбца
  • Вид соединения
  • К таблице
  • К столбцу

Логика:

  • Для каждой связи описываются затрагиваемые ею столбцы и таблицы по аналогии со списком связей в модели данных
  • Вид соединения писать в формате: Inner/Full/Left/Right Join 
RLS

В разделе располагается столько таблиц, сколько есть правил в проекте

Название каждой таблицы: "Правило <Фильтр_правила>", например: "Правило WHERE Product_name = {{var0}}"

Список столбцов:

  • Субъект правила
  • Тип субъекта
  • Переменные
  • Значения переменных

После таблицы писать статус

Логика:

  • Статус 2 видов: "Активно" и "Неактивно"
  • Пользователи и группы записывать в один столбец, в каждой ячейке один пользователь или группа
  • Тип субъекта 2 видов: "Пользователь" и "Группа"
  • Для каждой переменной указывать то значение, которое установлено для конкретного пользователя/группы (или значение по умолчанию, если такого нет)
Скрипт загрузки

Полностью копируется скрипт загрузки, все разделы сливаются в один, расположен в самом конце отчёта.

 

Поле ввода об изменениях в версии проекта

Проблема

Нет возможности описать в интерфейсе изменения в проекте для конкретной версии – если возникнет потребность в откате, то ориентироваться можно только дату/время изменения и память автора изменений.

Решение

Требования:

Окно для ввода комментария в списке версий

Путь:

МХенеджер проектов –> Навести курсор на проект –> Кнопка "инфо" на проекте ( i ) –> Вкладка "Версии"

Интерфейс в версиях:

  • В строках с версией должна находиться кнопка для открытия модального окна для написания комментария сразу после автора изменений
  • Кнопка появляется только если автор изменений = текущий пользователь (например, пользователь user001 не увидит поля ввода напротив версий, в которые вносил изменения пользователь admin228)
  • Если автор изменений не указан, то кнопка появляется для всех пользователей, имеющих права на управление данным проектом
  • Располагаются все кнопки в одном столбце (если автор не указан, то между временем изменения и полем ввода будет пустое пространство)
  • При наведении курсора на строку с текстом должно появляться всплывающее сообщение с записанным в него текстом

Интерфейс окна для комментария:

  • Название – "Создать комментарий"
  • Поле ввода текста с изменяемыми размерами. По умолчёанию в поле ввода отображается "Введите комментарий", пропадает после ввода любого символа
  • Кнопка "Отмена"
  • Кнопка "Создать"

Логика:

  • Окно открывается при нажатии на кнопку
  • В поле ввода можно вводить любые символы
  • Максимальное количество символов для ввода – 1000
  • Поле ввода может менять свои размеры при перетягивании за правый нижний угол
  • Необходимо добавить проверку для видимости кнопок, открывающих модальное окно: если автор изменений = текущий пользователь, то кнопка видима, иначе скрыта
  • При наведении курсора на строку в версиях должно появляться всплывающее сообщение с текстом. Высота области сообщения зависит от введенного текста, ширина примерно равна ширине окна со строками с версиями

Путь:

Менеджер проектов –> ПКМ по проекту –> "Откатить"

Интерфейс:

  • Увеличить окно в ширину на ~25-30% (в макете указаны нужные размеры)
  • В строках с версией может находиться текст, если он оставлен в версиях этого проекта
  • При наведении курсора на строку с текстом должно появляться всплывающее сообщение с записанным в него текстом

Логика:

  • Окно должно быть шире (поскольку окно модальное, проблем быть не должно)
  • В строках, где записан хотя бы один символ в версии, должен появляться нередактируемый текст
  • В окне показывается ровно столько текста, сколько помещается до границы. Если текст не помещается, то строка должна заканчиваться тремя точками (показывает, что есть продолжение)
  • При наведении курсора на текст справа от курсора должно появляться всплывающее сообщение с текстом. Высота области сообщения зависит от введенного текста, ширина примерно равна ширине модального окна

Уведомление об окончании лицензии

Бизнес-требования

  • Добавить в ячейку с пользователем (которая должна быть и в проекте, и в менеджере, и вообще во всех разделах):
    • Роль пользователя
    • Сколько осталось дней до окончания лицензии
  • Если осталось меньше 15 дней до окончания лицензии, то показывать модальное окно с сообщением, что скоро срок действия лицензии закончится + добавить значок уведомления на ячейку пользователя (например, восклицательный знак)

Логика:

  • Роль пользователя подтягивается из информации о пользователе в панели администратора
  • Информация о сроке действия лицензий и лицензий на публикации подтягивается из раздела "Лицензии" в панели администратора по следующему принципу:
    • Берётся дата окончания лицензии/лицензии на публикацию
    • Вычитается текущая дата
    • Результат в виде целого числа отображается в интерфейсе
Уведомление об окончании срока действия лицензии

Расположение:

Любая область стенда после авторизации

Интерфейс:

Модальное окно с сообщением:

  • Окно размещается по центру экрана, фон затемняется
  • 5
  • Название окна "Уведомление"
  • Текстовое сообщение для админов "Внимание, срок действия лицензии [на публикации] истекает через . . . день/дня/дней. Пожалуйста, обратитесь к Вашему менеджеру для получения нового лицензионного ключа и активируйте его в панели администратора"
  • Текстовое сообщение для пользователей с другими ролями "Внимание, срок действия лицензии [на публикации] истекает через . . . день/дня/дней. Пожалуйста, обратитесь к администратору системы для продления срока действия лицензии".
  • Кнопка "Закрыть"
  • Кнопка "Перейти к лицензиям"

Иконка рядом с ячейкой пользователя:

  • Отображать значок "Восклицательный знак" на ячейке пользователя или рядом с ней
  • При наведении на значок рядом с иконкой добавлять тултип "Срок действия лицензии [на публикации] истекает через . . . день/дня/дней"

Решение

На фронте добавить дополнительную информацию о пользователе и лицензиях в ячейку с пользователем, доступную любой роли.

Необходимо добавить новое действие по событию при входе пользователя – показывать модальное окно с сообщением о скором истечении срока лицензии, если осталось меньше 15 дней.

МХ п

При копировании проекта чтобы появлялся прелоадер и перекидывало в копию

Задача: Реализовать отображение прелоадера при копировании и перемещении проекта. 
При копировании проекта:
  • показывать лоадер с текстом «Проект копируется. Ожидайте» до завершения операции;
  • после завершения - автоматически открывать поток, в который был скопирован проект.

При перемещении проекта:

  • показывать лоадер с текстом «Проект перемещается. Ожидайте», 
  • после завершения - автоматически открывать поток, в который был перемещён проект.

ОР:

  • Прелоадер при копировании проекта, отображение статуса и открытие потока проекта;
  • Прелоадер при перемещении проекта, отображение статуса и открытие потока проекта;

Критерии приёмки:

  • При начале копирования/перемещения отображается прелоадер с корректным сообщением;
  • Прелоадер исчезает после завершения операции;
  • После завершения пользователь переходит в поток скопированного/перемещённого проекта;
  • Сообщения на прелоадере различаются для копирования и перемещения («копируется»/ «перемещается»).

Конструктор дашбордов 

МХ Экспорт проекта в PDF

Бизнес-требования

Логика
  • Выбор страниц аналогичен выбору страниц для формирования JSON-файла
  • Порядок указания страниц не играет никакой роли
  • При запуске функции начинается формирование PDF-файла:
    • Система по очереди открывает каждую из страниц, указанных в модальном окне
    • Формируется JPEG для открытой страницы по текущему правилу формирования JPEG (обязательно включаются все виджеты и состояния фильтров на странице)
    • Размер JPEG равен размеру страницы
    • Переключение между страницами выполняется в режиме реального времени (на глазах у пользователя). При этом на экране вместо модального окна появляется окно с лоадером и сообщением "Ожидайте. Файл формируется"
    • После того, как были пройдены все страницы, они собираются в единый PDF-файл
    • Каждая страница имеет свои размеры, считаем нормальной ситуацию, когда в одном файле представлено несколько страниц разных размеров
  • Для итогового файла на первой странице размещать в колонтитул (или водяным знаком) логин пользователя, выгрузившего страницы, и дату/время выгрузки
  • Итоговый файл сохраняется на устройство пользователя в папку "Загрузки", а также отправляется на почту, если та была указана

Отправка на почту

Новый функционал, позволяющий указать почту получателя и отправить на неё экспортированный объект. Доступно только для PDF и JPG.

Интерфейс:

  • В модальном окне "Экспорт страниц" для выбора формата экспорта добавить чекбокс "Отправить на почту" под форматами экспорта. Чекбокс появляется только если выбран формат "Снимок (JPG)" или "Файл (PDF)"
  • Под чекбоксом добавить поле ввода адреса электронной почты

Логика:

  • Чекбокс доступен только для JPG и PDF
  • При нажатии на чекбокс появляется поле ввода
  • При попытке продолжить с пустым полем ввода (и активным чекбоксом) должно выдавать ошибку "Поле «Email» обязательно для заполнения" 
  • Необходимо выполнять проверку на корректность email. Если email некорректный, то при попытке продолжить выдавать ошибку всплывающим сообщением "Введен некорректный email"
  • При продолжении с корректным email система должна использовать его после формирования итогового файла и отправить на указанную почту результат

Режим презентации при просмотре проекта

Бизнес-требования

  • Настройка, позволяющая установить время между автоматическим переключением страниц по порядку их следования (отдельно подчёркиваю,  что управлять последовательностью страниц для показа можно только меняя их порядок в проекте).
  • При переходе на другую страницу (в том числе ручном) обратный отсчёт таймера начинается заново (отдельно подчёркиваю, что таймер устанавливается один на все страницы, нельзя для разных страниц указать разное время переключения).
  • Должно быть доступно зрителю, при активации раскрывает полноэкранный режим

Решение

https://book.winsolutions.ru/books/konstruktor-dasbordov/page/rezim-prezentaciiКнопка "Пуск", активирует режим презентации с возможностью задать время между переключением страниц. Доступна зрителям (бизнес-пользователям) дашборда.

Расположение:

Конструктор дашбордов → Верхняя панель → Правая область (рядом с иконкой профиля, чатом)

Интерфейс:

  • Кнопка в режиме просмотра/редактирования дашборда (н-р, кнопка "Play" в виде треугольника) для активации режима презентации
  • Кнопка в режиме презентации (н-р, кнопка "Stop" в виде квадрата) для завершения режима презентации. В свободном режиме выделяется фоном как кнопка при наведении. При наведении выделяется более тёмным фоном
  • Меню, появляющееся при нажатии ПКМ на кнопку активации режима презентации:
    • Всплывающее меню под кнопкой, текст "Время между переходами"
    • Поле ввода в меню с подписью "сек". По умолчанию стоит 60
    • Кнопка "Запустить"

 

Авторефреш страницы 

Бизнес-требования

  • Настройка, позволяющая установить интервал времени, по истечении которого будут заново отправлены запросы на получение данных (не обновление страницы, а именно get_data).
  • Таймер должен обновляться при каждой подгрузке данных (т.е., после применения фильтров или переходов между разрезами и страницами).
  • При подгрузке данных в визуализацию должен отображаться лоадер.

Решение

https:Расположение в интерфейсе

Меню настроек → Настройки страницы → Под секцией "Изображение"

Интерфейс

Новая секция "Автообновление страницы" с переключателем на ней (по умолчанию выключен). Внутри секции:

  • Поле ввода числа (только целые положительные значения), по умолчанию 600
  • Текст перед полем ввода (слева) – "Таймер"
  • Текст после поля ввода (справа) – "Сек"

Логика (фронт):

Минимальное значение для ввода в поле – 60. Если пользователь вводит значение меньше, оно автоматически должно увеличиваться до 60. Проверка значения выполняется после окончания ввода, когда пользователь убрал фокус из поля.

Хранить в течение сессии пользователя новый параметр timeToRefresh, который зависит от значения времени автообновления страницы:

  • Если переключатель "Автообновление страницы" выключен, то параметр равен "-1"
  • Если переключатель "Автообновление страницы" включен, то параметр равен значению из поля ввода

Отправлять запрос get_data после наступления времени, равного [Время_отправки_прошлого_get_data] + timeToRefresh.

При timeToRefresh = "-1" запрос не должен отправляться повторно.

Для каждой визуализации идёт собственный отсчёт времени. Таймер обновляется при каждой отправке get_data (например, при фильтрации).

Отправляется стандартный запрос get_data как при входе в проект, при этом лоадеры на визуализациях должны срабатывать аналогичным образом.

Передавать параметр timeToRefresh на бэкенд в запросе PUT /api/book.winsolutions.ru/books/konstruktor-dasbordov/page/avtorefres-stranicyv3/project/{projectId}/dashboard-settings (для сохранения в настройках проекта)

Бэкенд:

Добавить в БД в таблицу для проектов новый параметр для каждой страницы проекта – timeToRefresh. Приходит в запросе на обновление данных по проекту.


Диспетчер данных

Коннектор к Битрикс 

МХ Готовый коннектор к битрикс АПИ 

Многопоточная загрузка

https://book.winsolutions.ru/books/dispetcer-podkliucenii-k-bd/page/mnogopotocnaia-zagruzka-dannyx 

Мультифайловые источники

Внедрена поддержка мультифайловых источников — механизма, который позволяет объединять несколько файлов в единый источник данных и корректно обновлять их без полной перезагрузки.

Теперь система умеет:

  • Обновлять только изменившиеся файлы, не затрагивая весь массив. Это снижает нагрузку и ускоряет обновление источников.

  • Хранить структуру эталонного файла, чтобы корректно работать даже в случае его удаления из хранилища.

  • Определять изменения по атрибутам файла, включая скрытые поля в имени.

  • Поддерживать автозаполнение отсутствующих полей — если в новом файле нет части колонок, система добавит их автоматически, используя значения по умолчанию.

  • Корректно работать с удалёнными файлами — пользователь сам выбирает, нужно ли сохранять данные из файлов, которых больше нет в хранилище (через параметр «Оставлять данные из удалённых файлов»).

Пагинация источников в скрипте загрузки 

Автокомплит в REST API

https://dev.azure.com/WinSolutions/Fastboard/_workitems/edit/28646/ 

Баги и мелкие фичи

Календарь. Добавить выбор типа календаря "Компактный/Расширенный"

Ограничение доступа к комментированию

НЕ ВНЕСЛА:

Объединение запросов по get_data (+SSE на node.js)

Создание источника с названием, которое уже используется

Просмотр действий пользователя

Добавить проверку сложностей пароля

Убрать зависимость логина от регистра (во время авторизации)