• v1.6.2 83a3202bdf

    v1.6.2 Stable

    mchus released this 2026-04-16 09:28:33 +03:00 | 126 commits to main since this release

    Что изменено:

    • на вкладке Storage в режиме сервера возвращена секция RAID Контроллеры
    • в режиме СХД RAID по-прежнему скрыт
    Downloads
  • mchus released this 2026-04-09 15:08:47 +03:00 | 130 commits to main since this release

    Ampere, Hopper, Blackwell now produce AMP/HOP/BWL suffixes (like ADA)
    so RTX cards across generations are distinguishable: RTX6000ADA vs
    RTX6000BWL. LOVELACE remains a skip token as it duplicates ADA info.

    Downloads
  • v1.5.9 7f6be786a8

    mchus released this 2026-04-03 17:55:26 +03:00 | 133 commits to main since this release

    • Add FOB/DDP basis to export options; DDP multiplies all prices ×1.3
    • Rename export file from "pricing" to "{FOB|DDP} {variant}" (e.g. "FOB v1")
    • Fix server article missing from CSV summary row (PN вендора column)
    • Skip per-row breakdown when neither LOT nor BOM is selected
    • Remove empty separator rows between configurations
    • Redesign export modal: split into Артикул / Цены / Базис поставки sections
    Downloads
  • v1.5.8 a360992a01

    v1.5.8 Stable

    mchus released this 2026-04-02 10:53:36 +03:00 | 134 commits to main since this release

    • Set PRAGMA journal_mode=WAL + synchronous=NORMAL on SQLite open;
      eliminates read blocking during background pricelist sync writes
    • Replace N+1 per-lot price loop in QuoteService local fallback with
      GetLocalPricesForLots batch query (120 queries → 3 per price-levels call)
    • Add CountAllPricelistItems, CountComponents, DBFileSizeBytes to LocalDB
    • Report local_pricelist_count, pricelist_items_count, components_count,
      db_size_bytes in qt_client_schema_state for performance diagnostics
    Downloads
  • v1.5.7 7ae804d2d3

    mchus released this 2026-03-30 12:34:57 +03:00 | 136 commits to main since this release

    SyncPricelistsIfNeeded was called synchronously in Create(), blocking
    the HTTP response for several seconds while pricelist data was fetched.
    Users clicking multiple times caused 6+ duplicate configurations.

    • Run SyncPricelistsIfNeeded in a goroutine so Create() returns immediately
    • Add TryLock mutex to SyncPricelistsIfNeeded to skip concurrent calls
    Downloads
  • v1.5.4 579ff46a7f

    mchus released this 2026-03-16 08:33:53 +03:00 | 150 commits to main since this release

    Дата релиза: 2026-03-16
    Тег: v1.5.4

    Предыдущий релиз: v1.5.0

    Ключевые изменения

    • pricing tab переработан: закупка и продажа разделены на отдельные таблицы с ценами за 1 шт.;
    • экран прайслиста переработан под разные типы источников; удалены misleading-колонки Поставщик и partnumbers;
    • runtime и startup ужесточены: локальный клиент принудительно работает только на loopback, конфиг автоматически нормализуется;
    • добавлены действия с вариантом и унифицированы правила именования _копия для вариантов и конфигураций;
    • исправлен CSV-экспорт прайсинговых таблиц в конфигураторе под Excel-совместимый формат Excel-friendly;
    • таблица проектов переработана: дата последней правки, tooltip с деталями, отдельный автор, компактные действия и ссылка на трекер;
    • sync больше не подменяет updated_at проектов временем синхронизации;
    • добавлена одноразовая утилита cmd/migrate_project_updated_at для пересинхронизации updated_at проектов из MariaDB в локальную SQLite;
    • runtime config, release notes и bible-local/ очищены и приведены к актуальной архитектуре;
    • scripts/release.sh больше не затирает существующий RELEASE_NOTES.md.

    Summary

    UI и UX

    • вкладка ценообразования теперь разделена на отдельные таблицы закупки и продажи;
    • список проектов переработан: новая колонка даты, отдельный автор, tooltip с деталями, компактные действия, ссылка на трекер;
    • для вариантов добавлены действия переименования, переноса и копирования;
    • копии вариантов и конфигураций теперь именуются единообразно: _копия, _копия2, _копия3.

    Прайслисты и экспорт

    • экран прайслиста переработан под разные типы источников;
    • из прайслистов убраны misleading-колонки Поставщик и partnumbers;
    • CSV-экспорт прайсинговых таблиц в конфигураторе приведён к Excel-совместимому формату.

    Runtime и sync

    • локальный runtime нормализует server.host к 127.0.0.1 и переписывает некорректный runtime config;
    • sync перестал подменять updated_at проектов временем локальной синхронизации;
    • добавлена утилита cmd/migrate_project_updated_at для восстановления локальных дат проектов с сервера.

    Документация и release tooling

    • bible-local/ сокращён до актуальных архитектурных контрактов;
    • release notes и release-структура приведены к одному формату;
    • scripts/release.sh теперь сохраняет существующий RELEASE_NOTES.md и не затирает его шаблоном.

    Затронутые области

    • cmd/qfs/;
    • cmd/migrate_project_updated_at/;
    • internal/localdb/;
    • internal/services/project.go;
    • internal/services/sync/service.go;
    • internal/handlers/pricelist.go;
    • web/templates/pricelist_detail.html;
    • web/templates/index.html;
    • web/templates/project_detail.html;
    • web/templates/projects.html;
    • web/templates/configs.html;
    • bible-local/.

    Совместимость

    • схема данных не меняется;
    • серверные SQL-миграции не требуются;
    • для уже испорченных локальных дат проектов можно один раз запустить go run ./cmd/migrate_project_updated_at -apply.
    Downloads
  • v1.5.0 06397a6bd1

    v1.5.0 Pre-Release

    mchus released this 2026-03-07 23:18:07 +03:00 | 160 commits to main since this release

    Что нового?

    • Добавлен импорт vendor workspace и связанный workflow обработки vendor spec.
      • Добавлен экспорт pricing/конфигураций в новом сервисном контуре.
      • Починена работа price levels в offline/local-first режиме.
      • Приложение переведено на более жёсткий local-first runtime: обычная работа больше не зависит от прямых запросов в MariaDB вне sync.
      • Удалены auth/RBAC и связанный мёртвый код для старой server-style модели.
      • Усилен startup recovery локальной SQLite: битые read-only кэши теперь могут автоматически quarantine/reset, чтобы приложение запускалось.
      • Переработан локальный каталог partnumber books и логика enrichment прайслистов через локальную копию qt_partnumber_book_items.
      • Полностью выпилен legacy-механизм lot_partnumbers.
      • Убрана неиспользуемая server-driven схема client local migrations.
      • Исправлен генератор article для кейса с 1xINTEL в GPU-сегменте.

    Как работает импорт xml

    В проекте добавлена новая кнопка "Импорт выгрузки вендора"
    image.png
    В данной версии поддерживаются только xml файлы конфигуратора lenovo - dcsc.
    Загружаются файлы-по одному.
    image.png
    После импорта распознанные аппаратные позиции добавляются в проект с соблюдением колличества и названия из конфигуратора
    image.png

    Распознавание спеки вендора

    Этот функционал релизнут в версии v1.4 но допилен тут. В разделе конфигуратора добавились вкладки
    image.png
    На вкладке BOM вставляется спека вендора из буфера обмена, либо если использовали импорт xml - она уже добавлена автоматически.
    image.png
    p/n для которых есть сопоставления в базе размечаются автоматически.

    Если работу начали со вставки BOM то внизу таблицы есть кнопка "пересчитать эстимейт" которая заменяет содержимое калькулятора распознанными LOT:

    Downloads
  • v1.4 ed0ef04d10

    mchus released this 2026-03-04 12:35:40 +03:00 | 168 commits to main since this release

    Импорт вендорной спецификации (BOM)

    • Полный цикл импорта BOM из вставки вендорного текста: разбор, привязка PN→LOT, автодополнение LOT.
    • Страница Партномера — сводная таблица всех встреченных партномеров с привязками к LOT.
    • Канонический механизм lot_mappings: изменения всегда сохраняются через единую точку записи.
    • При импорте конфигурации проекта локальная вендорная спецификация больше не затирается.

    Ценообразование

    • Переименование: «цена поставщика» → «цена проекта» во всём интерфейсе и экспорте.
    • Расширен CSV-экспорт прайсинга: добавлены дополнительные поля стоимости.
    • Исправлены итоговые суммы по складу на вкладке прайсинга.

    Таблица проектов

    • Компактный макет: столбцы дат и названий сжаты для отображения большего числа строк.
    • Исправлена нумерация строк при создании нового проекта.

    BOM — UX

    • Упрощена вставка BOM: фиксированный позиционный порядок столбцов.
    • Добавлена кнопка «Очистить BOM» со сбросом на стороне сервера.
    • Подсказка по формату рядом с полем вставки вендорного BOM.

    Исправления

    • Прайслисты: корректная работа при ограниченных правах БД; активы из встроенных ресурсов.
    • Синхронизация: дополнение недостающих позиций для уже существующих локальных прайслистов.
    • Миграции БД: новые SQLite-таблицы создаются через AutoMigrate вместо хардкодных миграций.
    • BOM: сохранение локальной вендорной спецификации при импорте конфига.

    Запуск на macOS

    Снимите карантинный атрибут через терминал: xattr -d com.apple.quarantine /path/to/qfs-darwin-arm64
    После этого бинарник запустится без предупреждения Gatekeeper.

    Downloads
  • v1.3.5 7b371add10

    v1.3.5 Pre-Release

    mchus released this 2026-02-24 15:13:41 +03:00 | 191 commits to main since this release

    Синхронизация прайслистов теперь догружает позиции для уже существующих локально прайслистов, если локальный кэш позиций пуст.
    Исправлен кейс 0 позиций в прайслисте при частично заполненном локальном кэше (local_pricelists есть, local_pricelist_items пусты).
    Добавлен graceful fallback при ограниченных правах MariaDB:
    если нет SELECT на lot_partnumbers и/или stock_log, синк прайслиста больше не падает;
    позиции и цены сохраняются без enrichment (могут отсутствовать остатки и partnumbers).
    Убран fallback на файловые templates/static рядом с бинарником:
    приложение всегда использует embedded-ресурсы из бинарника.
    Актуализирована документация по правам MariaDB (03-database.md):
    добавлены обязательные SELECT на lot_partnumbers и stock_log для полноценной синхронизации прайслистов.

    Downloads
  • v1.3.4 8d7fab39b4

    mchus released this 2026-02-24 15:09:12 +03:00 | 193 commits to main since this release

    Исправлен кейс, когда в списке прайслистов отображалось 0 позиций при наличии локальных “шапок” прайслистов.
    Теперь при синхронизации приложение догружает позиции для уже существующих локально прайслистов, если local_pricelist_items пусты.
    Добавлен graceful fallback при ограниченных правах MariaDB.
    Если у пользователя нет SELECT на RFQ_LOG.lot_partnumbers и/или RFQ_LOG.stock_log, синхронизация позиций прайслиста больше не падает.
    Позиции и цены прайслиста сохраняются без enrichment (могут отсутствовать partnumbers и остатки available_qty).
    Убран fallback на файловые web/templates и web/static рядом с бинарником.
    Приложение теперь всегда использует embedded-ресурсы из бинарника.
    Это делает поставку более предсказуемой на клиентских машинах.
    Обновлена документация по правам MariaDB (03-database.md).
    Добавлены обязательные SELECT-права на lot_partnumbers и stock_log для полноценной синхронизации прайслистов.
    Рекомендации после обновления

    Обновить клиент до v1.3.4.
    Нажать Синхронизация.

    Downloads