MaintennanceArchive Documentation
Maintenance Archive Controller Documentation
File: /controllers/maintennanceArchiveController.php
Purpose: Displays archived maintenance records with filtering and search capabilities
Last Updated: December 20, 2024
Total Functions: 1
Lines of Code: ~122
---
๐ Overview
The Maintenance Archive Controller provides a read-only interface for viewing completed maintenance records. It handles:
- โข Display of archived maintenance data
- โข Advanced filtering by receipt serial, client, and internal serial
- โข Integration with maintenance receipt system
- โข Branch-specific data filtering based on user session
- โข Complex data relationships for archive display
Primary Functions
- โ Display archived maintenance records
- โ Filter by receipt serial numbers
- โ Filter by internal serial numbers
- โ Client-based filtering
- โ Branch-specific data access control
- โ Complex JOIN queries for data relationships
Related Controllers
- โข maintenances.php - Active maintenance requests
- โข maintenancesends.php - Shipment tracking
- โข maintenancesuppliers.php - Supplier management
---
๐๏ธ Database Tables
Primary Tables (Archive Data)
| Table Name | Purpose | Key Columns | |
|---|---|---|---|
| **m_comreceipt** | Maintenance receipt headers | receiptserial, branchid | |
| **m_comreceiptdetail** | Maintenance receipt details | id, receiptserial, ourserial, clientid, branchid |
| Table Name | Purpose | Key Columns | |
|---|---|---|---|
| **client** | Customer information | clientid, clientname | |
| **branch** | Branch information | branchId, branchName | |
| **user** | System users | userid, employeename |
๐ Key Functions
1. Default Action (show) - Archive Display
Location: Lines 58-116
Purpose: Main archive viewing interface with filtering capabilities
Function Signature:
if (empty($do)||$do=="all")
Process Flow:
1. Load dropdown data for filters (serials, clients)
2. Process filter parameters from POST request
3. Build dynamic query string based on filters
4. Execute complex JOIN query if filters applied
5. Display results via archive template
Filter Parameters:
- โข
receiptSerial- Filter by maintenance receipt serial - โข
ourserial- Filter by internal tracking serial - โข
clientid- Filter by specific client
Data Loading Process:
// Load all receipt serials for dropdown
$allReceiptSerials = $MComreceiptDetailEX->getRecitSerialsByBranchEX($_SESSION['branchId']);
// Load all internal serials for dropdown
$serials = $MComreceiptDetailEX->getSerialsByBranchEX($_SESSION['branchId']);
// Load all clients for dropdown
$clients = $MComreceiptDetailEX->getClientsByBranchEX($_SESSION['branchId']);
Dynamic Query Building:
$queryString = '';
if(isset($receiptSerial) && $receiptSerial != -1) {
$queryString .= ' AND m_comreceipt.receiptserial = '.$receiptSerial;
}
if(isset($ourserial) && $ourserial != -1) {
$queryString .= ' AND m_comreceiptdetail.ourserial = "'.$ourserial.'"';
}
if(isset($clientid) && $clientid != -1) {
$queryString .= ' AND client.clientid = '.$clientid;
}
// Always filter by current branch
if($queryString != '') {
$queryString .= ' AND m_comreceiptdetail.branchid = '.$_SESSION['branchId'];
$archiveData = $MComreceiptDetailEX->queryByBranchInDetailEX3($queryString);
}
---
๐ Workflows
Workflow 1: Archive Data Filtering
---
๐ URL Routes & Actions
| URL Parameter | Function Called | Description | |
|---|---|---|---|
| `do=` (empty) | Default action | Display archive interface | |
| `do=all` | Default action | Same as empty - display archive |
| Parameter | Type | Description | |
|---|---|---|---|
| `receiptSerial` | Integer | Maintenance receipt serial number | |
| `ourserial` | String | Internal tracking serial | |
| `clientid` | Integer | Client ID for customer filter |
๐ Security & Permissions
Branch-Level Security
// All data filtered by user's branch
$queryString .= ' AND m_comreceiptdetail.branchid = '.$_SESSION['branchId'];
Session-Based Access Control
- โข Archive data restricted to user's assigned branch
- โข Session validation required for data access
- โข No modification capabilities (read-only archive)
Data Protection
- โข No update or delete operations available
- โข Historical data integrity maintained
- โข Branch isolation ensures data security
---
๐ Performance Considerations
Database Optimization
1. Indexes Needed:
- m_comreceiptdetail(branchid, receiptserial)
- m_comreceiptdetail(branchid, ourserial)
- m_comreceiptdetail(branchid, clientid)
- m_comreceipt(receiptserial)
2. Query Performance:
- Complex JOINs may be slow with large datasets
- Branch filtering reduces data volume
- Consider pagination for large result sets
Extended DAO Methods
// Utilizes optimized Extended DAO methods
$allReceiptSerials = $MComreceiptDetailEX->getRecitSerialsByBranchEX($_SESSION['branchId']);
$archiveData = $MComreceiptDetailEX->queryByBranchInDetailEX3($queryString);
---
๐ Common Issues & Troubleshooting
1. Empty Archive Display
Issue: No data shows even with valid filters
Cause: Branch session not set or invalid branch ID
Debug:
// Check session branch
echo "Current Branch: " . $_SESSION['branchId'];
// Verify branch has archive data
SELECT COUNT(*) FROM m_comreceiptdetail WHERE branchid = [branch_id];
2. Slow Query Performance
Issue: Archive queries taking too long
Cause: Missing indexes on filter columns
Fix: Add compound indexes:
CREATE INDEX idx_receipt_branch ON m_comreceiptdetail(branchid, receiptserial);
CREATE INDEX idx_serial_branch ON m_comreceiptdetail(branchid, ourserial);
CREATE INDEX idx_client_branch ON m_comreceiptdetail(branchid, clientid);
3. Filter Dropdown Issues
Issue: Filter dropdowns not populating
Cause: Extended DAO methods not returning data
Debug:
// Check if Extended DAO methods exist and work
$testSerials = $MComreceiptDetailEX->getRecitSerialsByBranchEX($_SESSION['branchId']);
var_dump($testSerials);
4. Cross-Branch Data Leakage
Issue: Users seeing data from other branches
Cause: Missing or incorrect branch filtering
Fix: Always verify branch filter is applied:
if(!isset($_SESSION['branchId'])) {
throw new Exception("Branch session not set");
}
---
๐งช Testing Scenarios
Test Case 1: Basic Archive Access
1. Login with valid branch assignment
2. Navigate to archive controller
3. Verify filter dropdowns populate with branch data
4. Confirm no data from other branches visible
Test Case 2: Filter Functionality
1. Select receipt serial filter
2. Verify results match selected serial
3. Add client filter to receipt serial filter
4. Confirm combined filtering works correctly
Test Case 3: Branch Isolation
1. Login as user from Branch A
2. Check available archive data
3. Login as user from Branch B
4. Verify different data set appears
Test Case 4: Performance Testing
1. Load archive with large dataset
2. Apply various filter combinations
3. Measure query execution times
4. Verify acceptable performance levels
---
๐ Related Documentation
- โข CLAUDE.md - PHP 8.2 migration guide
- โข maintenances.php - Active maintenance management
- โข Extended DAO Documentation - Custom DAO method reference
- โข Archive Data Structure - Database schema for archive tables
---
Documented By: AI Assistant
Review Status: โ Complete
Next Review: When performance optimization needed