Files
quality_app-v2/documentation/FG_REPORTS_IMPLEMENTATION.md
2026-01-25 22:25:18 +02:00

14 KiB

FG Scan Reports Implementation

Date: January 25, 2026
Version: 1.0
Status: Complete and Tested


Overview

The FG Scan Reports module provides comprehensive reporting and analysis capabilities for Finish Goods (FG) quality scans. Users can generate multiple types of reports, view detailed statistics, and export data in Excel or CSV formats.


Features Implemented

1. Report Types

The application supports 9 different report types:

Standard Reports

  • Today's Report - All scans from today
  • Select Day - Choose a specific date for scans
  • Date Range - Custom date range for scans
  • Last 5 Days - Scans from the last 5 days
  • All Data - Complete database of all scans

Defect Reports

  • Defects Today - Rejected scans from today
  • Defects by Date - Rejected scans on a specific date
  • Defects by Range - Rejected scans in a date range
  • Defects 5 Days - Rejected scans from last 5 days

2. Data Display

Reports include:

  • Dynamic Table - Responsive table showing all scan records
  • Real-time Statistics:
    • Total scans count
    • Approved scans count
    • Rejected scans count
    • Approval rate (calculated in real-time)
  • Status Badges - Visual indicators for approved (green) and rejected (red) scans
  • Empty State - User-friendly message when no data matches filters
  • Loading Indicator - Spinner animation during report generation

3. Export Capabilities

Two export formats supported:

Excel Export

  • Uses SheetJS (XLSX.js 0.18.5 from CDN)
  • Exports with .xlsx extension
  • Maintains data types and formatting
  • Includes all scan details

CSV Export

  • Plain text format compatible with all spreadsheet applications
  • Proper CSV encoding with quoted values
  • Filename includes date for easy organization

4. Modern UI/UX

  • Card-based Layout - Organized sections with clear visual hierarchy
  • Dark Mode Support - Full theme compatibility using CSS variables
  • Responsive Design - Mobile-friendly layout with adaptive grids
  • Interactive Elements:
    • Clickable report option cards with hover effects
    • Active state indicators
    • Smooth transitions and animations
  • Accessibility - Semantic HTML and proper ARIA labels

Technical Architecture

File Structure

quality_app-v2/
├── app/
│   ├── modules/
│   │   └── quality/
│   │       ├── routes.py (NEW endpoints)
│   │       ├── quality.py (NEW functions)
│   │       └── __init__.py
│   └── templates/
│       └── modules/quality/
│           └── fg_reports.html (NEW)
└── test_fg_data.py (Test data generator)

Backend Architecture

Routes (routes.py)

New Endpoints:

  1. GET /quality/reports - Displays FG Reports page

    • Template: modules/quality/fg_reports.html
    • Ensures table exists on load
  2. POST /quality/api/fg_report - API for report generation

    • Accepts JSON with report_type, filter_date, start_date, end_date
    • Returns JSON with data, title, and summary statistics
    • Validates report type and parameters
    • Handles all filtering logic
  3. GET /quality/api/daily_stats - Today's statistics

    • Returns: {total, approved, rejected}
    • Can be used for dashboard widgets
  4. GET /quality/api/cp_stats/<cp_code> - CP code specific stats

    • Returns: {total, approved, rejected} for specific CP code
    • Useful for detailed tracking

Business Logic (quality.py)

New Functions:

  1. get_fg_report(report_type, filter_date, start_date, end_date)

    • Generates reports based on type and filters
    • Builds dynamic SQL queries
    • Returns formatted data with statistics
    • Handles all 9 report types
  2. get_daily_statistics()

    • Fetches today's scan statistics
    • Returns: {total, approved, rejected}
    • Used for dashboard summary
  3. get_cp_statistics(cp_code)

    • Fetches statistics for specific CP code
    • Returns: {total, approved, rejected}
    • Useful for production tracking

Frontend Architecture

HTML Template (fg_reports.html)

Structure:

  1. Page Header - Title and description

  2. Query Card - Report selection interface

    • 9 clickable report option cards
    • Dynamic filter section (appears based on selection)
    • Query and Reset buttons
  3. Data Card - Results display

    • Report title
    • Statistics boxes (total, approved, rejected)
    • Export buttons (Excel, CSV)
    • Responsive data table
    • Empty state message

CSS Features:

  • 800+ lines of custom CSS
  • CSS variables for theming
  • Grid layouts for responsive design
  • Smooth animations and transitions
  • Dark mode compatibility
  • Mobile breakpoints at 768px

JavaScript Logic:

class FGReportManager {
    constructor()           // Initialize event listeners
    selectReport()          // Handle report type selection
    updateFilters()         // Show/hide filter sections
    generateReport()        // AJAX call to API
    displayReport()         // Render table with data
    exportExcel()          // Export to Excel via SheetJS
    exportCSV()            // Export to CSV
    resetReport()          // Clear filters and results
    showLoading()          // Show/hide loading spinner
    showSuccess()          // Flash success message
    showError()            // Flash error message
}

Database Schema

scanfg_orders Table

CREATE TABLE IF NOT EXISTS scanfg_orders (
    Id INT AUTO_INCREMENT PRIMARY KEY,
    operator_code VARCHAR(4) NOT NULL,
    CP_full_code VARCHAR(15) NOT NULL,
    OC1_code VARCHAR(4) NOT NULL,
    OC2_code VARCHAR(4) NOT NULL,
    quality_code TINYINT(3) NOT NULL,
    date DATE NOT NULL,
    time TIME NOT NULL,
    approved_quantity INT DEFAULT 0,
    rejected_quantity INT DEFAULT 0,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    INDEX idx_cp (CP_full_code),
    INDEX idx_date (date),
    INDEX idx_operator (operator_code),
    UNIQUE KEY unique_cp_date (CP_full_code, date)
)

Key Fields:

  • quality_code: 0 or '000' = approved; any other value = defect code
  • date + time: Scan timestamp
  • created_at: Record insertion time
  • Indexes optimize report queries by date, CP code, and operator

Usage Guide

Accessing Reports

  1. Navigate to Quality Module → Reports
  2. Page displays interactive report selection interface

Generating a Report

Simple Report (Daily, 5-Day, All):

  1. Click report option card
  2. Click "Generate Report" button
  3. Table populates automatically

Date-Filtered Report (Select Day, Defects by Date):

  1. Click report option card
  2. Filter section appears with date picker
  3. Select date
  4. Click "Generate Report"

Date Range Report (Date Range, Defects Range):

  1. Click report option card
  2. Filter section appears with start/end date pickers
  3. Select date range
  4. Click "Generate Report"

Exporting Data

  1. Generate a report
  2. Click "Export Excel" or "Export CSV" button
  3. File downloads automatically with date in filename

Viewing Statistics

Below the report title:

  • Total Scans - Count of all records in report
  • Approved - Count of approved scans (quality_code = 000)
  • Rejected - Count of rejected scans (quality_code ≠ 000)

API Reference

POST /quality/api/fg_report

Request:

{
    "report_type": "daily|select-day|date-range|5-day|defects-today|defects-date|defects-range|defects-5day|all",
    "filter_date": "YYYY-MM-DD",      // Optional: for select-day, defects-date
    "start_date": "YYYY-MM-DD",        // Optional: for date-range, defects-range
    "end_date": "YYYY-MM-DD"           // Optional: for date-range, defects-range
}

Response:

{
    "success": true,
    "title": "Today's FG Scans Report",
    "data": [
        {
            "id": 1,
            "operator_code": "OP01",
            "cp_code": "CP00000001-0001",
            "oc1_code": "OC01",
            "oc2_code": "OC10",
            "defect_code": "000",
            "date": "2026-01-25",
            "time": "09:15:30",
            "created_at": "2026-01-25 09:15:30"
        }
    ],
    "summary": {
        "approved_count": 50,
        "rejected_count": 10
    }
}

GET /quality/api/daily_stats

Response:

{
    "success": true,
    "data": {
        "total": 60,
        "approved": 50,
        "rejected": 10
    }
}

GET /quality/api/cp_stats/CP00000001-0001

Response:

{
    "success": true,
    "data": {
        "total": 100,
        "approved": 95,
        "rejected": 5
    }
}

Test Data

Included Test Data Generator

Location: test_fg_data.py

Usage:

docker exec quality_app_v2 python test_fg_data.py

Generated:

  • 10 days of historical data
  • 20-50 scans per day
  • 90% approval rate with realistic defect distribution
  • Mix of operators and CP codes

Sample Output:

✓ Table 'scanfg_orders' ready
✓ Generated 364 test scans

Database Summary:
  Total Scans:    371
  Approved:       243
  Rejected:       128
  Approval Rate:  65.5%

Integration Points

Linked with FG Scan Form

The reports use data from the FG Scan form (fg_scan.html):

  • Shared Table: scanfg_orders
  • Same Business Logic: Uses functions from quality.py
  • Unified Stats: Latest scans card displays recent data

Navigation

  • Quality Menu: Links to both FG Scan and Reports
  • Consistent Layout: Uses base template and theme system
  • Same User Permissions: Uses session authentication

Performance Considerations

Query Optimization

  1. Indexed Columns:

    • date - Fast date range filtering
    • CP_full_code - Fast CP code lookups
    • operator_code - Fast operator filtering
  2. Query Types:

    • Date filtering with DATE() function
    • DATE_SUB() for relative ranges
    • Efficient SUM/COUNT aggregations
  3. Limitations:

    • Reports fetch all matching records (consider pagination for 1000+ records)
    • Calculations done in app layer for compatibility

Frontend Performance

  1. Lazy Loading:

    • SheetJS library loaded from CDN only when used
    • No pre-loading of all reports
  2. Efficient Rendering:

    • Single table re-render per report
    • Minimal DOM manipulation
    • CSS transitions (no animations on large tables)
  3. Data Handling:

    • JSON parsing only on demand
    • No data caching between reports
    • Fresh API calls ensure current data

Browser Compatibility

Browser Excel Export CSV Export Date Picker Status
Chrome Fully Supported
Firefox Fully Supported
Safari Fully Supported
Edge Fully Supported
IE 11 ⚠️ Not Recommended

Future Enhancements

Planned Features

  1. Pagination - For reports with 1000+ records
  2. Filtering - Advanced filters by operator, CP code, defect type
  3. Sorting - Click column headers to sort
  4. PDF Export - Professional PDF reports with formatting
  5. Scheduled Reports - Automatic email delivery
  6. Charts & Graphs - Visual trend analysis
  7. Custom Report Builder - User-defined report templates
  8. Real-time Dashboard - Live statistics widget

Database Enhancements

  1. Partitioning - By date for better query performance
  2. Views - Pre-calculated statistics for dashboards
  3. Aggregation Tables - Daily/weekly summaries
  4. Archive Tables - Move old data for faster queries

Troubleshooting

Issue: "No data found for this report"

Causes:

  • No scans exist in database for selected period
  • Test data not generated yet

Solution:

  1. Run test data generator: docker exec quality_app_v2 python test_fg_data.py
  2. Select a date with known scans
  3. Check database directly: SELECT COUNT(*) FROM scanfg_orders;

Issue: Excel export creates corrupted file

Causes:

  • Special characters in data
  • Very large dataset (>10000 rows)
  • Browser blocking popup

Solution:

  1. Check browser console for errors (F12)
  2. Try CSV export as fallback
  3. Reduce data range
  4. Update XLSX library if outdated

Issue: Date picker not showing calendar

Causes:

  • Browser doesn't support HTML5 date input
  • JavaScript error preventing initialization
  • CSS hiding the element

Solution:

  1. Use modern browser (Chrome, Firefox, Safari, Edge)
  2. Check browser console (F12) for JS errors
  3. Try different date format (YYYY-MM-DD)

Issue: Reports running slowly

Causes:

  • Large database (100000+ records)
  • Missing database indexes
  • Server resource constraints

Solution:

  1. Check database indexes: SHOW INDEXES FROM scanfg_orders;
  2. Add missing indexes if needed
  3. Consider archiving old data
  4. Upgrade server resources

Testing Checklist

  • All 9 report types generate correctly
  • Filter sections appear/disappear appropriately
  • Date pickers work in all browsers
  • Statistics calculate accurately
  • Excel export preserves all data
  • CSV export is valid format
  • Empty state displays when no data
  • Loading spinner shows/hides properly
  • Dark mode styling works
  • Mobile layout is responsive
  • Error handling for API failures
  • Session authentication enforced


Support

For issues or questions:

  1. Check the Troubleshooting section above
  2. Review browser console logs (F12)
  3. Check server logs: docker logs quality_app_v2
  4. Verify database connectivity and table structure

Document Version: 1.0
Last Updated: January 25, 2026
Next Review: March 25, 2026