FG Scan form validation improvements with warehouse module updates

- Fixed 3 JavaScript syntax errors in fg_scan.html (lines 951, 840-950, 1175-1215)
- Restored form field validation with proper null safety checks
- Re-enabled auto-advance between form fields
- Re-enabled CP code auto-complete with hyphen detection
- Updated validation error messages with clear format specifications and examples
- Added autocomplete='off' to all input fields
- Removed auto-prefix correction feature
- Updated warehouse routes and modules for box assignment workflow
- Added/improved database initialization scripts
- Updated requirements.txt dependencies

Format specifications implemented:
- Operator Code: OP + 2 digits (example: OP01, OP99)
- CP Code: CP + 8 digits + hyphen + 4 digits (example: CP00000000-0001)
- OC1/OC2 Codes: OC + 2 digits (example: OC01, OC99)
- Defect Code: 3 digits only
This commit is contained in:
Quality App Developer
2026-01-30 10:50:06 +02:00
parent ac24e20fe1
commit b15cc93b9d
48 changed files with 16452 additions and 607 deletions

View File

@@ -0,0 +1,198 @@
# Quick Box Checkpoint - Implementation Complete
## What Was Implemented
### 1. Backend Routes Added to `/srv/quality_app-v2/app/modules/quality/routes.py`
**POST /quality/api/create-quick-box**
- Creates new box with auto-incremented number (BOX00000001, etc.)
- Stores in `boxes_crates` table
- Returns JSON with box_number and box_id
**POST /quality/api/generate-box-label-pdf**
- Generates PDF label with:
- 8cm × 5cm landscape format
- "BOX Nr: BOX00000001" text
- Code128 barcode
- Returns base64-encoded PDF for printing
**POST /quality/api/assign-cp-to-box**
- Assigns CP code to box
- Stores in `box_contents` table
- Links boxes_crates to CP code with quantity
### 2. Frontend JavaScript Updated in `/srv/quality_app-v2/app/templates/modules/quality/fg_scan.html`
**Form Submission**
- When "Scan To Boxes" checkbox is enabled
- After all form fields are entered and defect code triggers auto-submit
- Posts scan to database
- Shows modal for box assignment
**Quick Box Label Creation**
- Creates box with auto-increment
- Generates PDF label with barcode
- Sends to printer via QZ Tray
- Shows popup box number for user entry
- Fallback if QZ Tray unavailable
**Box Assignment Modal**
- Shows after scan is recorded
- Box number auto-populated from quick creation
- User enters quantity
- Assigns CP to box on submit
- Closes and resets form for next scan
## Workflow Implemented
```
1. User fills FG Scan form
- Operator Code (OP)
- CP Code (CP)
- OC1 Code (OC)
- OC2 Code (OC)
- Defect Code (000-999)
2. When defect code complete (3 digits)
- Auto-submits form
3. If "Scan To Boxes" checkbox ENABLED:
✅ Scan saved to database
✅ Success notification shown
✅ Modal appears
4. User clicks "Quick Box Label Creation"
✅ New box created (BOX00000001)
✅ PDF generated with barcode
✅ Label sent to printer
✅ Box number populated in modal
5. User confirms quantity
- Clicks "Assign"
✅ CP assigned to box
✅ Saved to database
✅ Modal closes
✅ Form resets
✅ Ready for next scan
6. If "Scan To Boxes" checkbox NOT enabled:
✅ Regular form submission
✅ No modal
✅ Standard POST behavior
```
## Files Modified
1. `/srv/quality_app-v2/app/modules/quality/routes.py`
- Added 3 new API routes (~150 lines)
- Added required imports (base64, BytesIO, reportlab, etc.)
2. `/srv/quality_app-v2/app/templates/modules/quality/fg_scan.html`
- Updated form submission handler
- Implemented "Scan To Boxes" logic
- Replaced stubbed "Quick Box Label Creation"
- Implemented box assignment modal handler
- Added error handling and notifications
## Testing Instructions
### Test 1: Regular FG Scan (Checkbox Unchecked)
1. Open FG Scan page
2. Leave "Scan To Boxes" UNCHECKED
3. Fill form: OP0001, CP00002042-0001, OC1234, OC5678, 000
4. **Expected**: Form submits normally, page reloads, scan appears in table
### Test 2: FG Scan with Box Assignment
1. Open FG Scan page
2. Check "Scan To Boxes" checkbox
3. Fill form: OP0001, CP00002042-0001, OC1234, OC5678, 000
4. **Expected**:
- Scan saves to database
- Modal appears
- "Quick Box Label Creation" button visible
### Test 3: Quick Box Creation & Printing
1. After Test 2 modal appears
2. Click "Quick Box Label Creation"
3. **Expected**:
- Success notification "Box BOX00000001 created"
- Box number auto-fills in modal
- If QZ Tray running: Label prints to printer
- If QZ Tray not running: Warning message shown
### Test 4: Box to CP Assignment
1. After box created (Test 3)
2. Enter quantity (e.g., "1")
3. Click "Assign"
4. **Expected**:
- Success notification "CP assigned to box"
- Modal closes
- Form resets
- Ready for next scan
### Test 5: Database Verification
After tests complete, verify in database:
```sql
-- Check created boxes
SELECT id, box_number, status, created_by, created_at
FROM boxes_crates
ORDER BY created_at DESC
LIMIT 5;
-- Check CP assignments
SELECT b.box_number, bc.cp_code, bc.quantity, bc.created_at
FROM box_contents bc
JOIN boxes_crates b ON bc.box_id = b.id
ORDER BY bc.created_at DESC
LIMIT 5;
-- Check scans recorded
SELECT operator_code, cp_code, defect_code, date, time
FROM scanfg_orders
ORDER BY id DESC
LIMIT 5;
```
## Deployment Notes
1. **Dependencies Added** (auto-installed):
- reportlab (PDF generation)
- code128 barcode library
2. **Database Tables** (auto-created on first use):
- `boxes_crates` - Box inventory
- `box_contents` - CP to box mapping
3. **QZ Tray** (optional but recommended):
- Install QZ Tray application on workstations
- Network printers connected and configured
- If not available, app falls back to notifications
## Error Scenarios Handled
✅ Box creation fails → Error message, no modal
✅ PDF generation fails → Error message, modal shows anyway
✅ QZ Tray not connected → Warning, modal shows with fallback
✅ Printer not found → Warning, but box still created
✅ CP assignment fails → Error message, modal stays open for retry
✅ Missing form fields → Validation errors as before
## Next Steps
1. Restart docker to apply changes
2. Run the 5 tests above
3. Verify database entries
4. Test with/without QZ Tray
5. Test multiple scans in sequence
## Code Quality
✅ Error handling on all operations
✅ User notifications for all outcomes
✅ Async/await for clean code flow
✅ Fallback options when services unavailable
✅ Database transactions and constraints
✅ Proper logging for debugging
✅ Commented code sections
✅ No breaking changes to existing features