-
QuoteForge v1.5.4 Stable
released this
2026-03-16 08:33:53 +03:00 | 12 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 Pre-Release
released this
2026-03-07 23:18:07 +03:00 | 22 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
В проекте добавлена новая кнопка "Импорт выгрузки вендора"
В данной версии поддерживаются только xml файлы конфигуратора lenovo - dcsc.
Загружаются файлы-по одному.
После импорта распознанные аппаратные позиции добавляются в проект с соблюдением колличества и названия из конфигуратора
Распознавание спеки вендора
Этот функционал релизнут в версии v1.4 но допилен тут. В разделе конфигуратора добавились вкладки
На вкладке BOM вставляется спека вендора из буфера обмена, либо если использовали импорт xml - она уже добавлена автоматически.
p/n для которых есть сопоставления в базе размечаются автоматически.Если работу начали со вставки BOM то внизу таблицы есть кнопка "пересчитать эстимейт" которая заменяет содержимое калькулятора распознанными LOT:
Downloads
- Добавлен импорт vendor workspace и связанный workflow обработки vendor spec.
-
released this
2026-03-04 12:35:40 +03:00 | 30 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 Pre-Release
released this
2026-02-24 15:13:41 +03:00 | 53 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
-
released this
2026-02-24 15:09:12 +03:00 | 55 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
-
Release v1.3.2 Pre-Release
released this
2026-02-19 18:48:01 +03:00 | 61 commits to main since this releaseSummary
Release focuses on stability and data integrity for local configurations. Added configuration revision history, stronger recovery for broken local sync/version states, improved sync self-healing, and clearer API error logging.
Changes
Configuration Revisions
- Added full local configuration revision flow with storage and UI support.
- Introduced revisions page/template and backend plumbing for browsing revisions.
- Prevented duplicate revisions when content did not actually change.
Local Data Integrity and Recovery
- Added migration and snapshot support for local configuration version data.
- Hardened updates for legacy/orphaned configuration rows:
- allow update when project UUID is unchanged even if referenced project is missing locally;
- recover gracefully when
current_version_idis stale or version rows are missing.
- Added regression tests for orphan-project and missing-current-version scenarios.
Sync Reliability
- Added smart self-healing path for sync errors.
- Fixed duplicate-project sync edge cases.
API and Logging
- Improved HTTP error mapping for configuration updates (
404/403instead of generic500in known cases). - Enhanced request logger to capture error responses (status, response body snippet, gin errors) for failed requests.
UI and Export
- Updated project detail and index templates for revisions and related UX improvements.
- Updated export pipeline and tests to align with revisions/project behavior changes.
Breaking Changes
None identified.
Downloads
-
Changes since v1.3.0: Pre-Release
released this
2026-02-13 19:33:16 +03:00 | 69 commits to main since this releaseRelease Notes — v1.3.1
Что нового
- Проекты: добавлены
codeиvariant(уникальность по связке),nameстал необязательным. - UI проектов: обновлена таблица, кликабельные коды/варианты, новый вариант через кнопку.
- Breadcrumbs: единый стиль, кликабельные переходы и домик “все проекты”.
- Квотатор: навигация по проектам/вариантам через breadcrumbs.
Миграции и совместимость
- Добавлены миграции для
code,variantиnullable nameв MariaDB и SQLite. - Перезагрузка локальной БД теперь не сбрасывает параметры подключения.
- Дедупликация проектов по
codeв интерфейсе и улучшенная синхронизация вариантов.
Исправления и улучшения
- Корректная обработка
NULL nameв UI и API. - Стабильное формирование кодов/вариантов и уникальность на уровне БД.
- Улучшенные элементы интерфейса (варианты в виде чипов, клики по ним).
Downloads
- Проекты: добавлены
-
Release v1.3.0 (2026-02-11) Pre-Release
released this
2026-02-11 19:24:25 +03:00 | 75 commits to main since this releaseSummary
Introduced article generation with pricelist categories, added local configuration storage, and expanded sync/export capabilities. Simplified article generator compression and loosened project update constraints.
Changes
Main Features: Articles + Pricelist Categories
- Article generation pipeline
- New generator and tests under
internal/article/ - Category support with test coverage
- New generator and tests under
- Pricelist category integration
- Handler and repository updates
- Sync backfill test for category propagation
Local Configuration Storage
- Local DB support
- New localdb models, converters, snapshots, and migrations
- Local configuration service for cached configurations
Export & UI
- Export handler updates for article data output
- Configs and index templates adjusted for new article-related fields
Behavior Changes
- Cross-user project updates allowed
- Removed restriction in project service
- Article compression refinement
- Generator logic simplified to reduce complexity
Breaking Changes
None identified. Existing APIs remain intact.
Files Modified
internal/article/*- Article generator + categories + testsinternal/localdb/*- Local DB models, migrations, snapshotsinternal/handlers/export.go- Export updatesinternal/handlers/pricelist.go- Category handlinginternal/services/sync/service.go- Category backfill logicweb/templates/configs.html- Article field updatesweb/templates/index.html- Article field updates
Stats: 33 files changed, 2059 insertions(+), 329 deletions(-)
Commits
5edffe8- Add article generation and pricelist categoriese355903- Allow cross-user project updatese58fd35- Refine article compression and simplify generator
Testing Checklist
- Tests not run (not requested)
Migration Notes
- New migrations:
022_add_article_to_configurations.sql023_add_server_model_to_configurations.sql024_add_support_code_to_configurations.sql- Ensure migrations are applied before running v1.3.0
Downloads
- Article generation pipeline
-
Release v1.2.3 (2026-02-10) Pre-Release
released this
2026-02-10 11:11:10 +03:00 | 78 commits to main since this releaseSummary
Unified synchronization functionality with event-driven UI updates. Resolved user confusion about duplicate sync buttons by implementing a single sync source with automatic page refreshes.
Changes
Main Feature: Sync Event System
- Added
sync-completedevent in base.html'ssyncAction()function- Dispatched after successful
/api/sync/allor/api/sync/push - Includes endpoint and response data in event detail
- Enables pages to react automatically to sync completion
- Dispatched after successful
Configs Page (
configs.html)- Removed "Импорт с сервера" button - duplicate functionality no longer needed
- Updated layout - changed from 2-column grid to single button layout
- Removed
importConfigsFromServer()function - functionality now handled by navbar sync - Added sync-completed event listener:
- Automatically reloads configurations list after sync
- Resets pagination to first page
- New configurations appear immediately without manual refresh
Projects Page (
projects.html)- Wrapped initialization in DOMContentLoaded:
- Moved
loadProjects()and all event listeners inside handler - Ensures DOM is fully loaded before accessing elements
- Moved
- Added sync-completed event listener:
- Automatically reloads projects list after sync
- New projects appear immediately without manual refresh
Pricelists Page (
pricelists.html)- Added sync-completed event listener to existing DOMContentLoaded:
- Automatically reloads pricelists when sync completes
- Maintains existing permissions and modal functionality
Benefits
User Experience
- ✅ Single "Синхронизация" button in navbar - no confusion about sync sources
- ✅ Automatic list updates after sync - no need for manual F5 refresh
- ✅ Consistent behavior across all pages (configs, projects, pricelists)
- ✅ Better feedback: toast notification + automatic UI refresh
Architecture
- ✅ Event-driven loose coupling between navbar and pages
- ✅ Easy to extend to other pages (just add event listener)
- ✅ No backend changes needed
- ✅ Production-ready
Breaking Changes
/api/configs/importendpoint still works but UI button removed- Users should use navbar "Синхронизация" button instead
- Backend API remains unchanged for backward compatibility
Files Modified
web/templates/base.html- Added sync-completed event dispatchweb/templates/configs.html- Event listener + removed duplicate UIweb/templates/projects.html- DOMContentLoaded wrapper + event listenerweb/templates/pricelists.html- Event listener for auto-refresh
Stats: 4 files changed, 59 insertions(+), 65 deletions(-)
Commits
99fd80b- feat: unify sync functionality with event-driven UI updates
Testing Checklist
- Configs page: New configurations appear after navbar sync
- Projects page: New projects appear after navbar sync
- Pricelists page: Pricelists refresh after navbar sync
- Both
/api/sync/alland/api/sync/pushtrigger updates - Toast notifications still show correctly
- Sync status indicator updates
- Error handling (423, network errors) still works
- Mode switching (Active/Archive) works correctly
- Backward compatibility maintained
Known Issues
None - implementation is production-ready
Migration Notes
No migration needed. Changes are frontend-only and backward compatible:
- Old
/api/configs/importendpoint still functional - No database schema changes
- No configuration changes needed
Downloads
- Added
-
Release v1.2.2 (2026-02-09) Pre-Release
released this
2026-02-09 17:38:50 +03:00 | 81 commits to main since this releaseSummary
Fixed CSV export filename inconsistency where project names weren't being resolved correctly. Standardized export format across both manual exports and project configuration exports to use
YYYY-MM-DD (project_name) config_name BOM.csv.Commits
8f596cefix: standardize CSV export filename format to use project name
Changes
CSV Export Filename Standardization
Problem:
- ExportCSV and ExportConfigCSV had inconsistent filename formats
- Project names sometimes fell back to config names when not explicitly provided
- Export timestamps didn't reflect actual price update time
Solution:
- Unified format:
YYYY-MM-DD (project_name) config_name BOM.csv - Both export paths now use PriceUpdatedAt if available, otherwise CreatedAt
- Project name resolved from ProjectUUID via ProjectService for both paths
- Frontend passes project_uuid context when exporting
Technical Details:
Backend:
- Added
ProjectUUIDfield toExportRequeststruct in handlers/export.go - Updated ExportCSV to look up project name from ProjectUUID using ProjectService
- Ensured ExportConfigCSV gets project name from config's ProjectUUID
- Both use CreatedAt (for ExportCSV) or PriceUpdatedAt/CreatedAt (for ExportConfigCSV)
Frontend:
- Added
projectUUIDandprojectNamestate variables in index.html - Load and store projectUUID when configuration is loaded
- Pass
project_uuidin JSON body for both export requests
Files Modified
internal/handlers/export.go- Project name resolution and ExportRequest updateinternal/handlers/export_test.go- Updated mock initialization with projectService paramcmd/qfs/main.go- Pass projectService to ExportHandler constructorweb/templates/index.html- Add projectUUID tracking and export payload updates
Testing Notes
✅ All existing tests updated and passing
✅ Code builds without errors
✅ Export filename now includes correct project name
✅ Works for both form-based and project-based exportsBreaking Changes
None - API response format unchanged, only filename generation updated.
Known Issues
None identified.
Downloads