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

Related Controllers

---

๐Ÿ—„๏ธ Database Tables

Primary Tables (Direct Operations)

Table NamePurposeKey Columns
**premium**Premium payment recordsid, date, value, premiumclientId, payed, rest, conditions
**premiumclient**Premium client masterid, client_id, userid, date
**client**Customer informationclientid, clientname, typeclientid, clientareaid
**clientarea**Customer areasclientareaid, name
**typeclient**Client type definitionstypeId, typeName
### Query Focus

This controller uses a specialized query method getpremiumbyclientid() which likely filters for:

---

๐Ÿ”‘ 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:

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:

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

---

5. Support Functions - Reference Data Loading

Locations: Lines 220-236

Purpose: Load dropdown data for report filters

Functions identical to main premium report:

---

๐Ÿ”„ Workflows

Workflow 1: Generate Delayed Premium Report

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
START: Delayed Premium Report
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
โ–ผ
โ–ผ
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
1Load Reference Data
- Load clients for dropdown
- Load areas (for display, not filtering)
- Load client types (for display, not filtering)
- Load system settings
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
โ–ผ
โ–ผ
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
2Extract Simplified Filter Parameters
- Get client ID filter (primary filter)
- Get date range (from/to)
- Skip area and client type filters
- Set default dates if missing
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
โ–ผ
โ–ผ
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
3Build Simplified SQL Query
- Start with base WHERE clause
- Add client filter if specified
- Add date range with timezone adjustment
- Skip area and type filtering
- Clean up trailing AND/WHERE
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
โ–ผ
โ–ผ
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
4Execute Delayed Premium Query
- Use specialized getpremiumbyclientid() method
- Focus on delayed/overdue payments
- Include client information
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
โ–ผ
โ–ผ
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
5Process Client Type Names
- Same processing as main premium report
- Convert type IDs to names
- Handle "all types" special case
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
โ–ผ
โ–ผ
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
6Generate Delay Report Display
- Assign data to Smarty template
- Use delay-specific template
- Display via premiumReportDelayview/showNew.html
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

---

๐ŸŒ URL Routes & Actions

URL ParameterFunction CalledDescriptionAuthentication
`do=show` or emptyDefaultGenerate delayed premium reportRequired
### Filter Parameters

Active Filters:

Disabled Filters:

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:

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:

---

๐Ÿ› 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:

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

---

Documented By: AI Assistant

Review Status: โš ๏ธ Same performance issues as main report + code maintenance concerns

Next Review: After code cleanup and performance optimization