PremiumReportDelay Documentation
Premium Report Delay Controller Documentation
File: /controllers/premiumReportDelayController.php
Purpose: Generates specialized reports for delayed/deferred premium payments
Last Updated: December 20, 2024
Total Functions: 4
Lines of Code: ~242
---
๐ Overview
The Premium Report Delay Controller is a specialized reporting module focused on tracking and analyzing delayed premium payments. It provides a simplified interface compared to the main premium report controller, focusing specifically on client-based filtering and date ranges for delayed payment tracking. This controller helps identify clients with overdue payments and monitor payment deferrals.
Primary Functions
- โ Filter delayed premium reports by client and date
- โ Track overdue premium payments
- โ Client-specific delayed payment analysis
- โ Date range filtering for delayed payments
- โ Simplified reporting interface for delay tracking
- โ Client type name resolution for delayed payments
Related Controllers
- โข premiumReportController.php - Main premium reporting
- โข premiumController.php - Premium management and deferrals
- โข allpremiumReportController.php - Comprehensive premium reports
- โข clientReportsController.php - General client reporting
---
๐๏ธ Database Tables
Primary Tables (Direct Operations)
| Table Name | Purpose | Key Columns | |
|---|---|---|---|
| **premium** | Premium payment records | id, date, value, premiumclientId, payed, rest, conditions | |
| **premiumclient** | Premium client master | id, client_id, userid, date | |
| **client** | Customer information | clientid, clientname, typeclientid, clientareaid | |
| **clientarea** | Customer areas | clientareaid, name | |
| **typeclient** | Client type definitions | typeId, typeName |
This controller uses a specialized query method getpremiumbyclientid() which likely filters for:
- โข Delayed/overdue payments
- โข Payments with
conditions = 1(deferred status) - โข Past-due dates with unpaid status
---
๐ Key Functions
1. Default Action / show() - Generate Delayed Premium Report
Location: Lines 91-212
Purpose: Main reporting function for delayed premium payments
Function Signature:
// Triggered when: do=show or empty $do
$startDate = $_REQUEST['from'];
$endDate = $_REQUEST['to'];
$clientId = $_REQUEST['clientId'];
Key Differences from Main Premium Report:
- โข Removed Area/Type Filters: Lines 113-114, 132-146 commented out
- โข Simplified Query: Uses
getpremiumbyclientid()instead ofgetpremium() - โข Focused on Client + Date: Primary filtering by client and date range only
Process Flow:
1. Load reference data (clients, areas, types)
2. Extract filter parameters (client ID and date range only)
3. Build simplified SQL query string
4. Execute delayed premium query
5. Process client type information
6. Display via delay-specific template
---
2. Simplified Query Building - Delay-Focused Filtering
Location: Lines 122-180
Purpose: Build SQL WHERE clause optimized for delay tracking
Active Filters:
// Only client and date filters active
if ($clientId != '' && $clientId != '-1') {
$queryString .= ' premiumclient.client_id = ' . $clientId . ' AND';
}
if ($startDate != '' && $endDate != '') {
$queryString .= ' premium.date >= "' . $startDate . '" AND premium.date <= "' . $endDate . '" AND';
}
Disabled Filters (commented out):
// Area filtering disabled
// if ($areaId != '' && $areaId != '-1') { ... }
// Client type filtering disabled
// if ($typeclientId != '' && $typeclientId != '-1') { ... }
---
3. Specialized Data Query - Delayed Payments Focus
Location: Line 182
Purpose: Execute query specifically designed for delayed payment tracking
Query Method:
$allData = $premiumExt->getpremiumbyclientid($queryString);
Difference from Main Report:
- โข Main report uses:
getpremium($queryString) - โข Delay report uses:
getpremiumbyclientid($queryString)
This suggests the delay controller focuses on client-centric delayed payment data, possibly with additional filtering for overdue or deferred payments.
---
4. Client Type Processing - Same as Main Report
Location: Lines 183-205
Purpose: Convert client type IDs to readable names
Implementation: Identical to main premium report controller
- โข Same N+1 query performance issue
- โข Same special handling for "all client types" (-20)
- โข Same type name concatenation logic
---
5. Support Functions - Reference Data Loading
Locations: Lines 220-236
Purpose: Load dropdown data for report filters
Functions identical to main premium report:
- โข
getClients()- Load active clients - โข
getClientarea()- Load all client areas - โข
getTypeclient()- Load client types
---
๐ Workflows
Workflow 1: Generate Delayed Premium Report
---
๐ URL Routes & Actions
| URL Parameter | Function Called | Description | Authentication |
|---|---|---|---|
| `do=show` or empty | Default | Generate delayed premium report | Required |
Active Filters:
- โข
from- Start date (YYYY-MM-DD format) - โข
to- End date (YYYY-MM-DD format) - โข
clientId- Specific client ID (-1 for all clients)
Disabled Filters:
- โข
areaId- Not used in delay reports - โข
typeclientId- Not used in delay reports
URL Examples
/controllers/premiumReportDelayController.php
/controllers/premiumReportDelayController.php?clientId=123
/controllers/premiumReportDelayController.php?from=2024-01-01&to=2024-12-31
/controllers/premiumReportDelayController.php?clientId=123&from=2024-01-01&to=2024-12-31
---
๐งฎ Calculation Methods
Date Range Processing
Identical to main premium report:
if (isset($Programsetting->reportsPlusHours) && !empty($Programsetting->reportsPlusHours)) {
$reportsPlusHours = $Programsetting->reportsPlusHours + 24;
$endDate = date('Y-m-d', strtotime('+' . $reportsPlusHours . ' hour', strtotime($endDate)));
$startDate = date('Y-m-d', strtotime('+' . $Programsetting->reportsPlusHours . ' hour', strtotime($startDate)));
} else {
$endDate = $endDate . ' 23:59:59';
$startDate = $startDate . " 00:00:00";
}
Simplified Filter Logic
// Only client filtering active
if ($clientId != '' && $clientId != '-1') {
$message .= "ุงูุนู
ูู :" . $clientName;
$queryString .= ' premiumclient.client_id = ' . $clientId . ' AND';
}
---
๐ Security & Permissions
Security Features
Identical to main premium report:
- โข Authentication required
- โข Same SQL injection vulnerabilities
- โข Same input handling issues
Security Concerns
Same issues as main report:
1. Direct parameter inclusion in SQL
2. No input sanitization
3. LIKE queries without escaping
---
๐ Performance Considerations
Performance Issues
Same critical issues as main premium report:
1. N+1 Query Problem: Client type processing loads all types for each record
2. Repeated queries: $TypeClientDAO->queryAll() in loop
Advantages over Main Report
1. Simplified filtering: Fewer parameters reduce query complexity
2. Focused dataset: Specialized query may return smaller result sets
3. Reduced processing: No area/type filter processing
Optimization Recommendations
Same as main premium report:
- โข Pre-load all client types
- โข Use prepared statements
- โข Implement pagination for large datasets
---
๐ Common Issues & Troubleshooting
1. Commented Code Maintenance
Issue: Large blocks of commented code make maintenance difficult
Cause: Features disabled by commenting instead of proper configuration
Recommendation: Remove commented code or implement feature flags:
// Instead of commented code
if (ENABLE_AREA_FILTERING) {
// Area filtering logic
}
2. Template Path Confusion
Issue: Uses different template path than main report
Template: premiumReportDelayview/showNew.html vs premiumReportview/showNew.html
Check: Verify template exists and has correct formatting
3. Query Method Differences
Issue: Different DAO method may return different data structure
Methods:
- โข Main:
getpremium() - โข Delay:
getpremiumbyclientid()
Debug: Compare data structures returned by both methods
4. Same Performance Issues
Issue: Inherits all performance problems from main premium report
Impact: N+1 queries still present in client type processing
---
๐งช Testing Scenarios
Test Case 1: Delayed Payment Focus
1. Create premium with past due date
2. Mark payment as deferred (conditions=1)
3. Run delay report
4. Verify deferred payment appears
5. Check client information displays correctly
Test Case 2: Simplified Filtering
1. Try to use area/type parameters in URL
2. Verify they are ignored
3. Confirm only client and date filters work
4. Check filter message reflects active filters only
Test Case 3: Template Differences
1. Compare output between main and delay reports
2. Verify delay template shows relevant information
3. Check for delay-specific features (if any)
4. Confirm styling and layout appropriate
Test Case 4: Query Method Comparison
1. Compare data from getpremium() vs getpremiumbyclientid()
2. Check for differences in returned fields
3. Verify delay report shows appropriate subset
4. Test performance differences
---
๐ Related Documentation
- โข CLAUDE.md - PHP 8.2 migration guide
- โข premiumReportController.md - Main premium reporting
- โข premiumController.md - Premium management and deferrals
- โข Code Refactoring Guidelines - Removing commented code
- โข Template Naming Conventions - Consistent template organization
---
Documented By: AI Assistant
Review Status: โ ๏ธ Same performance issues as main report + code maintenance concerns
Next Review: After code cleanup and performance optimization