8dadd66f4541aa7c488ec3ed2bf92515582b0906
Fixes barcode parsing for ANSI MH10.8.2 format barcodes that don't use GS/RS separators. Problem: - Barcodes like [)>06PSAM9019-ND1PJL-100-25-T... were not being parsed - Only separator-based and JSON formats were supported - User's real-world barcodes were being added to queue as raw strings Solution: - Added ANSI MH10.8.2 format detection ([)>06 prefix) - Extract part code between P and first field marker (1P, 30P) - Extract quantity from Q<digits> pattern - Updated both desktop and web app parsing logic Tested with real barcode: - Input: [)>06PSAM9019-ND1PJL-100-25-T30PSAM9019-NDK1...Q1811... - Parsed: Part=SAM9019-ND, Qty=1811 ✅ Files Changed: - src/stocktool/stock_tool_gui_v2.py - Enhanced parse_scan() - src/stocktool/web/static/js/app.js - Enhanced parseBarcode() - test_barcode_parsing.py - Test script for validation - test_barcode_analyze.py - Barcode structure analysis tool - QUICKSTART_WEB.md - Quick start guide for web app Supported Formats Now: 1. JSON-like: {PM:PART-CODE,QTY:10} 2. Separator-based: GS/RS (\x1D, \x1E) separated fields 3. ANSI MH10.8.2: [)>06P<part>...Q<qty>... (NEW!) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
InvenTree Stock Tool
A comprehensive barcode scanning application for InvenTree inventory management.
Available in two versions:
- Desktop App (tkinter) - Traditional GUI application
- Web App (Flask) - Modern browser-based interface ⭐ NEW!
Features
- Stock Addition: Add stock to inventory by scanning barcodes
- Stock Updates: Update existing stock levels
- Stock Checking: Check current stock levels
- Part Location: Find where parts are stored
- Async Part Import: Non-blocking background import for unknown parts
- Server Connection Monitoring: Real-time connection status
- Barcode Command Support: Control the app via barcode commands
- Web Interface: Access from any device with a browser (NEW!)
Requirements
- Python 3.9 or higher
- InvenTree server with API access
Installation
Using UV (Recommended)
# Clone the repository
git clone <repository-url>
cd stocktool
# Install with uv
uv sync
# Run the DESKTOP application
uv run stock-tool
# OR run the WEB application
uv run stock-tool-web
# Then open browser to http://localhost:5000
👉 For Web App setup, see WEB_APP.md
Manual Installation
# Install dependencies
pip install sv-ttk pillow requests pyyaml
# Run the application
python src/stocktool/stock_tool_gui_v2.py
Configuration
Create a configuration file at ~/.config/scan_and_import.yaml:
host: https://your-inventree-server.com
token: your-api-token-here
Required Fields
host: Your InvenTree server URL (without trailing slash)token: Your InvenTree API token
Usage
- Select Location: Scan a location barcode or enter location ID
- Select Mode: Choose operation mode (Add Stock, Update Stock, Check Stock, or Locate Part)
- Scan Parts: Scan part barcodes to perform operations
Async Part Import (New!)
When you scan a part that doesn't exist in the system:
- Part is automatically queued for background import
- Continue scanning other parts - no waiting required!
- Watch the "Pending Imports" section to see import progress
- Part is automatically processed when import completes
- Failed imports retry automatically (up to 3 attempts)
Benefits:
- No more UI freezing when importing parts
- Scan multiple unknown parts in quick succession
- Visual feedback showing import progress
- Automatic error handling and retry logic
Barcode Commands
The application supports special barcode commands for quick mode switching:
-
Mode Switching:
MODE:ADD,MODE:IMPORT,ADD_STOCK,IMPORT- Switch to Add Stock modeMODE:UPDATE,UPDATE_STOCK,UPDATE- Switch to Update Stock modeMODE:CHECK,MODE:GET,CHECK_STOCK,CHECK- Switch to Check Stock modeMODE:LOCATE,LOCATE_PART,LOCATE,FIND_PART- Switch to Locate Part mode
-
Debug Control:
DEBUG:ON,DEBUG_ON- Enable debug modeDEBUG:OFF,DEBUG_OFF- Disable debug mode
-
Location Management:
CHANGE_LOCATION,NEW_LOCATION,SET_LOCATION,LOCATION- Change current location
Supported Barcode Formats
The application supports multiple barcode formats:
- JSON-like format:
{PM:PART-CODE,QTY:10} - Separator-based format: Fields separated by
\x1Dor\x1E- Part codes starting with
30Por1P - Quantities starting with
Q
- Part codes starting with
- InvenTree location barcodes:
INV-SL<location_id>
Development
Project Structure
stocktool/
├── src/
│ └── stocktool/
│ ├── __init__.py
│ └── stock_tool_gui_v2.py
├── tests/
│ ├── __init__.py
│ ├── test_add_stock.py
│ ├── test_duplicate_handling.py
│ ├── test_parse_fix.py
│ └── test_stock_level.py
├── pyproject.toml
├── .gitignore
└── README.md
Running Tests
# Using UV
uv run pytest
# Manual
pytest tests/
Building
# Build the package
uv build
# Install locally
uv pip install -e .
License
MIT License
Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
Description
Languages
Python
68.5%
JavaScript
14.9%
Shell
8.3%
HTML
8.3%