CSG Picker-Shipper Helper (Parts & Invoice Lookup)
A standalone Windows desktop application designed for warehouse packers and shipping associates. This application provides a fast, simple interface for looking up inventory parts, pulling invoice data from QuickBooks, weighing packages, fetching shipping rates, and verifying picks on the warehouse floor using mobile barcode scanners.
The application is built in Python using CustomTkinter for a modern, touch-friendly UI and is compiled to a single standalone executable via PyInstaller.
🚀 Key Features & Implementation Status
1. Parts Inventory Lookup (Packer Workflow)
- Status: Fully Implemented
- Description: Allows packers to fuzzy-search for parts by SKU, Description, or Interchange numbers. Data is synced periodically from a network CSV into a local SQLite database for instant search performance.
- Details:
- Displays Part Image (prioritizes local SMB shares over public URLs).
- Shows Customer Price, Location, Quantity Available, Grade, and Warranty Info.
- One-click copying of full SKUs.
2. Invoice & Shipping Lookup (QuickBooks Integration)
- Status: Fully Implemented
- Description: Integrates with QuickBooks Desktop (via QBFC and
qb_efficiencybridge) to pull recent invoices and customer data. - Details:
- Allows searching by Customer Name or Invoice Number.
- Extracts exact billing and shipping addresses.
- Provides a single "Copy full address" button formatted properly for third-party shipping software.
3. Mobile Picking Client (CSG Part Verifier)
- Status: Fully Implemented
- Description: A lightweight background Flask web server (
picker_server.py) runs on port 5001 alongside the desktop app, serving a mobile-friendly HTML5 application. - Details:
- Mobile operators (using Android/PC) can access the picker client via the host's IP address.
- Uses device cameras to scan Invoice QR codes to pull up digital pick lists.
- Verifies picked items by scanning Box/Part QR codes, providing immediate audio success/error feedback.
4. USB Postal Scale Integration
- Status: Fully Implemented
- Description: Natively integrates with standard USB HID weighing scales (e.g., Stamps.com, Dymo, Mettler Toledo).
- Details:
- Uses the
hidpackage to read real-time weights (oz, lbs, grams) directly from the USB scale without needing third-party drivers. - Fails gracefully if no scale is attached.
- Uses the
5. Live Shipping Rates & Label Generation
- Status: Fully Implemented
- Description: Connects to the ShipEngine API and FedEx APIs to retrieve live shipping rates based on the package weight and dimensions.
- Details:
- Fetches dimensional weight quotes.
- Can generate standard shipping labels or custom internal GDI-rendered labels (via
labels.py). - GDI labels include generated QR codes (Invoice Number for shipping, SKU for parts) to facilitate the mobile picking workflow.
- Keeps a local SQLite history of printed labels (
label_history.py).
6. Design & Cut File Discovery
- Status: Fully Implemented
- Description: Facilitates rapid opening of CNC/Laser design files associated with specific SKUs.
- Details:
cut_files.pyscans configured SMB network folders on a background thread for matching Roland cut files (.eps,.ai,.svg,.dxf, etc.) and LightBurn files (.lbrn,.lbrn2).- One-click launching of the correct design file directly in the system's default design software.
🛠 Architecture & Tech Stack
- UI Framework: CustomTkinter (Python)
- Database / Cache: SQLite (Built-in, ensures instant search speed by preventing direct QB calls during lookup)
- Search Engine:
rapidfuzzfor highly tolerant string matching. - API Servers:
Flaskhandles the mobile picking server. - QuickBooks Bridge:
pywin32/QBFCintegration (via localqb_efficiencyservice). - Build & Deployment:
PyInstaller(GeneratesPartsLookup_Setup.exevia Inno Setup). - Barcode Scanning:
html5-qrcodelibrary for the mobile web client.
📦 Building & Running
Development Server:
run_dev.bat
Starts the application from source in development mode.
Standalone Picker Server:
python run_picker.py
Starts just the Flask mobile picking server on port 5001 for testing.
Building the Executable:
build.bat
Generates a standalone PartsLookup.exe using PyInstaller.
Building the Installer:
build_installer.bat
Requires Inno Setup. Compiles the .iss file to generate CSGPackerShipperHelper_Setup.exe for end-user distribution.