Mikhail Chusavitin
af79b6f3bf
export: update CSV filename format to YYYY-MM-DD (PROJECT-NAME) BOM
...
Change exported CSV filename format from:
YYYY-MM-DD NAME SPEC.csv
To:
YYYY-MM-DD (NAME) BOM.csv
Applied to both:
- POST /api/export/csv (direct export)
- GET /api/configs/:uuid/export (config export)
All tests passing.
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com >
2026-02-09 10:49:56 +03:00
Mikhail Chusavitin
bca82f9dc0
export: implement streaming CSV with Excel compatibility
...
Implement Phase 1 CSV Export Optimization:
- Replace buffering with true HTTP streaming (ToCSV writes to io.Writer)
- Add UTF-8 BOM (0xEF 0xBB 0xBF) for correct Cyrillic display in Excel
- Use semicolon (;) delimiter for Russian Excel locale
- Use comma (,) as decimal separator in numbers (100,50 instead of 100.50)
- Add graceful two-phase error handling:
* Before streaming: return JSON errors for validation failures
* During streaming: log errors only (HTTP 200 already sent)
- Add backward-compatible ToCSVBytes() helper
- Add GET /api/configs/:uuid/export route for configuration export
New tests (13 total):
- Service layer (7 tests):
* UTF-8 BOM verification
* Semicolon delimiter parsing
* Total row formatting
* Category sorting
* Empty data handling
* Backward compatibility wrapper
* Writer error handling
- Handler layer (6 tests):
* Successful CSV export with streaming
* Invalid request validation
* Empty items validation
* Config export with proper headers
* 404 for missing configs
* Empty config validation
All tests passing, build verified.
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com >
2026-02-09 10:47:10 +03:00
17969277e6
pricing: enrich pricelist items with stock and tighten CORS
v1.1.0
2026-02-08 10:27:36 +03:00
0dbfe45353
security: harden secret hygiene and pre-commit scanning
2026-02-08 10:27:23 +03:00
f609d2ce35
Add pricelist type column and commit pending changes
v1.0.5
2026-02-08 10:03:24 +03:00
593280de99
sync: clean stale local pricelists and migrate runtime config handling
2026-02-08 10:01:27 +03:00
eb8555c11a
Stop tracking ignored release artifacts
2026-02-08 08:55:21 +03:00
7523a7d887
Remove admin pricing stack and prepare v1.0.4 release
v1.0.4
2026-02-07 21:23:23 +03:00
95b5f8bf65
refactor lot matching into shared module
2026-02-07 06:22:56 +03:00
b629af9742
Implement warehouse/lot pricing updates and configurator performance fixes
2026-02-07 05:20:35 +03:00
72ff842f5d
Fix stock import UI bugs: dead code, fragile data attr, double-click, silent duplicates
...
- Remove unused stockMappingsCache variable (dead code after selectStockMappingRow removal)
- Move data-description from SVG to button element for reliable access
- Add disabled guard on bulk add/ignore buttons to prevent duplicate requests
- Return explicit error in UpsertIgnoreRule when rule already exists
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-02-06 23:30:01 +03:00
Mikhail Chusavitin
5f2969a85a
Refine stock import UX with suggestions, ignore rules, and inline mapping controls
2026-02-06 19:58:42 +03:00
Mikhail Chusavitin
eb8ac34d83
Fix stock mappings JSON fields and enable row selection for editing
2026-02-06 19:39:39 +03:00
Mikhail Chusavitin
104a26d907
Add stock pricelist admin flow with mapping placeholders and warehouse details
2026-02-06 19:37:12 +03:00
Mikhail Chusavitin
b965c6bb95
WIP: save current pricing and pricelist changes
2026-02-06 19:07:22 +03:00
Mikhail Chusavitin
29035ddc5a
configs: save pending template changes
2026-02-06 16:43:04 +03:00
Mikhail Chusavitin
2f0ac2f6d2
projects: add tracker_url and project create modal
2026-02-06 16:42:32 +03:00
Mikhail Chusavitin
8a8ea10dc2
Add tracker link on project detail page
2026-02-06 16:31:34 +03:00
Mikhail Chusavitin
51e2d1fc83
Fix local pricelist uniqueness and preserve config project on update
2026-02-06 16:00:23 +03:00
Mikhail Chusavitin
3d5ab63970
Make full sync push pending and pull projects/configurations
2026-02-06 15:25:07 +03:00
Mikhail Chusavitin
c02a7eac73
Prepare v1.0.3 release notes
v1.0.3
2026-02-06 14:04:06 +03:00
Mikhail Chusavitin
651427e0dd
Add projects table controls and sync status tab with app version
2026-02-06 14:02:21 +03:00
Mikhail Chusavitin
f665e9b08c
sync: recover missing server config during update push
2026-02-06 13:41:01 +03:00
Mikhail Chusavitin
994eec53e7
Fix MySQL DSN escaping for setup passwords and clarify DB user setup
2026-02-06 13:27:57 +03:00
Mikhail Chusavitin
2f3c20fea6
update stale files list
2026-02-06 13:03:59 +03:00
Mikhail Chusavitin
80ec7bc6b8
Apply remaining pricelist and local-first updates
2026-02-06 13:01:40 +03:00
Mikhail Chusavitin
8e5c4f5a7c
Use admin price-refresh logic for pricelist recalculation
2026-02-06 13:00:27 +03:00
Mikhail Chusavitin
1744e6a3b8
fix: skip startup sql migrations when not needed or no permissions
2026-02-06 11:56:55 +03:00
Mikhail Chusavitin
726dccb07c
feat: add projects flow and consolidate default project handling
v1.0.2
2026-02-06 11:39:12 +03:00
Mikhail Chusavitin
38d7332a38
Update pricelist repository, service, and tests
2026-02-06 10:14:24 +03:00
Mikhail Chusavitin
c0beed021c
Enforce pricelist write checks and auto-restart on DB settings change
v1.0.1
2026-02-05 15:44:54 +03:00
Mikhail Chusavitin
08b95c293c
Purge orphan sync queue entries before push
2026-02-05 15:17:06 +03:00
Mikhail Chusavitin
c418d6cfc3
Handle stale configuration sync events when local row is missing
2026-02-05 15:11:43 +03:00
Mikhail Chusavitin
548a256d04
Drop qt_users dependency for configs and track app version
2026-02-05 15:07:23 +03:00
Mikhail Chusavitin
77c00de97a
Добавил шаблон для создания пользователя в БД
2026-02-05 10:55:02 +03:00
Mikhail Chusavitin
0c190efda4
Fix sync owner mapping before pushing configurations
2026-02-05 10:43:34 +03:00
Mikhail Chusavitin
41c0a47f54
Implement local DB migrations and archived configuration lifecycle
2026-02-04 18:52:56 +03:00
Mikhail Chusavitin
f4f92dea66
Store configuration owner by MariaDB username
v0.2.11-3-gf4f92de
2026-02-04 12:20:41 +03:00
Mikhail Chusavitin
f42b850734
Recover DB connection automatically after network returns
2026-02-04 11:43:31 +03:00
Mikhail Chusavitin
d094d39427
Add server-to-local configuration import in web UI
2026-02-04 11:31:23 +03:00
Mikhail Chusavitin
4509e93864
Store config in user state and clean old release notes
v0.2.11
2026-02-04 11:21:48 +03:00
Mikhail Chusavitin
e2800b06f9
Log binary version and executable path on startup
2026-02-04 10:21:18 +03:00
Mikhail Chusavitin
7c606af2bb
Fix missing config handling and auto-restart after setup
2026-02-04 10:19:35 +03:00
Mikhail Chusavitin
fabd30650d
Store local DB in user state dir as qfs.db
v0.2.10
2026-02-04 10:03:17 +03:00
Mikhail Chusavitin
40ade651b0
Ignore local Go cache directory
2026-02-04 09:55:36 +03:00
Mikhail Chusavitin
1b87c53609
Fix offline usage tracking and active pricelist sync
2026-02-04 09:54:13 +03:00
a3dc264efd
Merge feature/phase2-sqlite-sync into main
v0.2.9
2026-02-03 22:04:17 +03:00
20056f3593
Embed assets and fix offline/sync/pricing issues
v0.2.8
2026-02-03 21:58:02 +03:00
Mikhail Chusavitin
8a37542929
docs: add release notes for v0.2.7
v0.2.7
2026-02-03 11:39:23 +03:00
Mikhail Chusavitin
0eb6730a55
fix: Windows compatibility and localhost binding
...
**Windows compatibility:**
- Added filepath.Join for all template and static paths
- Fixes "path not found" errors on Windows
**Localhost binding:**
- Changed default host from 0.0.0.0 to 127.0.0.1
- Browser always opens on 127.0.0.1 (localhost)
- Setup mode now listens on 127.0.0.1:8080
- Updated config.example.yaml with comment about 0.0.0.0
This ensures the app works correctly on Windows and opens
browser on the correct localhost address.
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com >
2026-02-03 11:38:28 +03:00