96 lines
4.6 KiB
Markdown
96 lines
4.6 KiB
Markdown
# 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. |