Implements a modern web-based interface alongside the existing desktop app. Features: - Flask backend with REST API and WebSocket support - Responsive web UI with TailwindCSS and Alpine.js - Real-time updates via Socket.IO - All desktop features available in browser - Multi-user support - Mobile-friendly responsive design - Same async import queue functionality Technology Stack: - Backend: Flask + Flask-SocketIO + Flask-CORS - Frontend: HTML5 + TailwindCSS + Alpine.js - Real-time: WebSocket (Socket.IO) - Icons: Font Awesome 6 New Files: - src/stocktool/web/app.py - Flask application server - src/stocktool/web/templates/index.html - Main web interface - src/stocktool/web/static/js/app.js - Alpine.js application logic - WEB_APP.md - Complete web app documentation API Endpoints: - GET /api/config - Application configuration - GET /api/locations - List locations - POST /api/part/search - Search for part - POST /api/part/import - Queue part import - POST /api/stock/add - Add stock - POST /api/stock/update - Update stock - POST /api/stock/check - Check stock level - POST /api/part/locate - Locate part - GET /api/pending - Get pending imports WebSocket Events: - import_complete - Part import finished - import_retry - Import failed, retrying - import_failed - Import failed completely - barcode_parsed - Barcode successfully parsed Benefits: - Access from any device with a browser - No desktop installation required - Better mobile experience - Multiple users can work simultaneously - Easier deployment and updates - Network-accessible within local network Usage: uv run stock-tool-web # Open browser to http://localhost:5000 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
167 lines
4.1 KiB
Markdown
167 lines
4.1 KiB
Markdown
# 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)
|
|
|
|
```bash
|
|
# 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](WEB_APP.md)**
|
|
|
|
### Manual Installation
|
|
|
|
```bash
|
|
# 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`:
|
|
|
|
```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
|
|
|
|
1. **Select Location**: Scan a location barcode or enter location ID
|
|
2. **Select Mode**: Choose operation mode (Add Stock, Update Stock, Check Stock, or Locate Part)
|
|
3. **Scan Parts**: Scan part barcodes to perform operations
|
|
|
|
### Async Part Import (New!)
|
|
|
|
When you scan a part that doesn't exist in the system:
|
|
|
|
1. **Part is automatically queued** for background import
|
|
2. **Continue scanning other parts** - no waiting required!
|
|
3. **Watch the "Pending Imports" section** to see import progress
|
|
4. **Part is automatically processed** when import completes
|
|
5. **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 mode
|
|
- `MODE:UPDATE`, `UPDATE_STOCK`, `UPDATE` - Switch to Update Stock mode
|
|
- `MODE:CHECK`, `MODE:GET`, `CHECK_STOCK`, `CHECK` - Switch to Check Stock mode
|
|
- `MODE:LOCATE`, `LOCATE_PART`, `LOCATE`, `FIND_PART` - Switch to Locate Part mode
|
|
|
|
- **Debug Control**:
|
|
- `DEBUG:ON`, `DEBUG_ON` - Enable debug mode
|
|
- `DEBUG: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:
|
|
|
|
1. **JSON-like format**: `{PM:PART-CODE,QTY:10}`
|
|
2. **Separator-based format**: Fields separated by `\x1D` or `\x1E`
|
|
- Part codes starting with `30P` or `1P`
|
|
- Quantities starting with `Q`
|
|
3. **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
|
|
|
|
```bash
|
|
# Using UV
|
|
uv run pytest
|
|
|
|
# Manual
|
|
pytest tests/
|
|
```
|
|
|
|
### Building
|
|
|
|
```bash
|
|
# 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.
|