- main.py: _pending_record_id locks resolved DB key at Add/Update time;
show original barcode in update frame; auto-focus mass field on open;
clear all fields and return focus to ID input after confirm/reset
- database_manager.py: buffered=True cursors on all SELECTs; no
fetchall() after DML; replace ON DUPLICATE KEY UPDATE VALUES() with
explicit UPDATE then INSERT fallback; add app_actions.log with
structured per-action entries; purge_old_action_logs(30) on startup
- dist/DatabaseApp.exe: rebuilt single-file Windows binary (30.9 MB)
- remove unused files: README, WINDOWS_README, run_app.sh,
setup_database.sh, setup_user.sql, test_database.py, sept.csv"
- All widget heights, fonts, padding and spacing derived from
Window.height so layout fits any screen (800p, 1080p, etc.)
- Content block wrapped in AnchorLayout (anchor_y=center) so it
sits centered in the space above the numpad instead of bottom-aligned
- Rebuilt DatabaseApp.exe (30.9 MB)
- Exit button relocated from bottom-right overlay to right side of title row
- Spacing between action buttons and update frame reduced 40px -> 10px
- Rebuilt DatabaseApp.exe (30.9 MB)
- Auto-detect article type: 8-digit strings = BOX (strip leading zeros),
anything else = PRODUCT
- Live mode indicator label with manual override toggle button
- On-screen numeric keypad (digits, decimal, backspace, Enter)
- Active field routing: numpad writes to whichever field is focused
- Scanner compatibility: Config keyboard_mode=system, refocus after
each numpad press so HID scanner always has a target
- Reset Values now also redirects numpad/scanner focus to ID field
- Suppress OS virtual keyboard on touch for ID and mass fields
- Save/load DB host from config.json (works both in dev and built .exe)
- All DB operations moved to background threads to prevent UI blocking
- Connection timeout set to 5s to avoid long hangs on unreachable host
- Added Test Connection button to Settings popup
- Added red Exit button fixed to bottom-right corner of main screen
- Updated DatabaseApp.spec with full Kivy deps (sdl2, glew, angle) and hidden imports
- PyInstaller-aware base path using sys.frozen for config.json persistence