# 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_efficiency` bridge) 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 `hid` package 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. ### 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.py` scans 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:** `rapidfuzz` for highly tolerant string matching. * **API Servers:** `Flask` handles the mobile picking server. * **QuickBooks Bridge:** `pywin32` / `QBFC` integration (via local `qb_efficiency` service). * **Build & Deployment:** `PyInstaller` (Generates `PartsLookup_Setup.exe` via Inno Setup). * **Barcode Scanning:** `html5-qrcode` library for the mobile web client. --- ## 📦 Building & Running **Development Server:** ```cmd run_dev.bat ``` Starts the application from source in development mode. **Standalone Picker Server:** ```cmd python run_picker.py ``` Starts just the Flask mobile picking server on port `5001` for testing. **Building the Executable:** ```cmd build.bat ``` Generates a standalone `PartsLookup.exe` using PyInstaller. **Building the Installer:** ```cmd build_installer.bat ``` Requires Inno Setup. Compiles the `.iss` file to generate `CSGPackerShipperHelper_Setup.exe` for end-user distribution.