Realestateunitsalertsemptys Documentation
Real Estate Units Alerts Emptys Controller
File: /controllers/realestateunitsalertsemptys.php
Purpose: Monitors and reports empty real estate properties and available units
Last Updated: December 20, 2024
Total Functions: 2
Lines of Code: ~32
---
๐ Overview
The Real Estate Units Alerts Emptys Controller is a specialized monitoring system that tracks and reports on empty/available real estate properties and units. It provides:
- โข Empty property monitoring (supplier availability)
- โข Available unit tracking (client availability)
- โข Property-level availability status
- โข Unit-level availability within properties
- โข Filtering by specific properties or units
- โข Real-time availability reporting
This controller serves as an alert system for property managers to quickly identify available rental properties and units for potential occupancy.
Primary Functions
- โ Monitor supplier-available properties (savaible = 0)
- โ Track client-available units (cavaible = 0)
- โ Filter by specific property
- โ Filter by specific unit
- โ Generate availability reports
- โ Property and unit relationship display
Related Controllers
- โข realestateunits.php - Property and unit management
- โข realestatepayments.php - Payment tracking
- โข realestateaveragerevenue.php - Revenue analysis
---
๐๏ธ Database Tables
Primary Tables (Direct Operations)
| Table Name | Purpose | Key Columns | |
|---|---|---|---|
| **realestates** | Property master records | id, realestatename, del, savaible | |
| **realestatesunits** | Individual property units | id, realestateid, unitname, unitarea, del, cavaible |
๐ Key Functions
1. Default Action - Empty Properties Alert Interface
Location: Lines 6-9
Purpose: Display the main empty properties monitoring interface
Process Flow:
1. Display header template
2. Load empty properties alert view (realestateunitsalertsemptysview/show.html)
3. Display footer template
---
2. getdata - Generate Empty Properties and Units Report
Location: Lines 10-31
Purpose: Generate comprehensive report of all empty/available properties and units
Function Signature:
// Triggered when: do=getdata (POST)
$realestateid = filter_input(INPUT_POST, 'realestateid');
$realestateunitid = filter_input(INPUT_POST, 'realestateunitid');
Process Flow:
1. Input Processing:
$realestateid = filter_input(INPUT_POST, 'realestateid');
$realestateunitid = filter_input(INPUT_POST, 'realestateunitid');
$searchQuery = '';
$searchQuery2 = '';
2. Property Filter Building:
if($realestateid != ''){
$searchQuery .=' and realestates.id = ' . $realestateid . ' ';
}
3. Unit Filter Building:
if($realestateunitid != ''){
$searchQuery2 .=' and realestatesunits.id = ' . $realestateunitid . ' ';
}
4. Supplier-Available Properties Query:
// Properties available for supplier occupancy/purchase
$srealestates = R::findAll('realestates', "where del < 2 and realestates.savaible = 0 $searchQuery");
5. Client-Available Properties with Units Query:
// Properties for client rental with available units
$crealestates = R::findAll('realestates', "where del < 2 $searchQuery");
foreach($crealestates as $crealestate){
// Find units within each property that are available for clients
$realestatesunits = R::findAll('realestatesunits',
"realestateid = $crealestate->id and realestatesunits.cavaible = 0 and del < 2 $searchQuery2");
$crealestate->realestatesunits = $realestatesunits;
}
6. Template Assignment and Display:
$smarty->assign('srealestates', $srealestates);
$smarty->assign('crealestates', $crealestates);
$smarty->display("realestateunitsalertsemptysview/getdata.html");
---
๐ Workflows
Workflow 1: Empty Properties Monitoring
---
๐ URL Routes & Actions
| URL Parameter | Function Called | Description | |
|---|---|---|---|
| `do=` (empty) | Default action | Display empty properties monitoring interface | |
| `do=getdata` | getdata processing | Generate empty properties and units report |
do=getdata
POST Parameters (all optional):
- โข
realestateid- Filter by specific property ID - โข
realestateunitid- Filter by specific unit ID
---
๐งฎ Calculation Methods
Availability Status Logic
Property-Level Availability (Supplier Focus):
// savaible = 0: Property available for supplier use/purchase
// savaible = 1: Property occupied/unavailable for suppliers
$srealestates = R::findAll('realestates', "where del < 2 and realestates.savaible = 0");
Unit-Level Availability (Client Focus):
// cavaible = 0: Unit available for client rental
// cavaible = 1: Unit occupied/unavailable for clients
$realestatesunits = R::findAll('realestatesunits',
"realestateid = $crealestate->id and realestatesunits.cavaible = 0 and del < 2");
Filtering Logic
// Property filtering
if($realestateid != ''){
$searchQuery .=' and realestates.id = ' . $realestateid . ' ';
}
// Unit filtering (applied to unit queries)
if($realestateunitid != ''){
$searchQuery2 .=' and realestatesunits.id = ' . $realestateunitid . ' ';
}
Data Structure Output
srealestates: [
{
id: 1,
realestatename: "Property A",
savaible: 0,
del: 0
}
]
crealestates: [
{
id: 2,
realestatename: "Property B",
realestatesunits: [
{
id: 3,
unitname: "Unit 1",
unitarea: "100 sqm",
cavaible: 0,
del: 0
}
]
}
]
---
๐ Security & Permissions
Input Validation
// Secure input filtering for numeric IDs
$realestateid = filter_input(INPUT_POST, 'realestateid');
$realestateunitid = filter_input(INPUT_POST, 'realestateunitid');
SQL Injection Prevention
- โข RedBeanPHP ORM with parameterized queries
- โข Numeric ID validation
- โข No direct string concatenation in SQL
Data Access Control
// Soft delete protection - only active records
"where del < 2"
// Availability status validation
"realestates.savaible = 0" // Supplier available
"realestatesunits.cavaible = 0" // Client available
---
๐ Performance Considerations
Database Optimization
1. Critical Indexes:
- realestates(del, savaible)
- realestatesunits(realestateid, cavaible, del)
- realestates(id) for filtering
2. Query Efficiency:
- Simple WHERE clauses for availability status
- Efficient nested queries for property-unit relationships
- Minimal data loading (only necessary fields)
Memory Management
- โข Simple data structures without heavy processing
- โข Efficient foreach loops for unit assignment
- โข Minimal template variables
---
๐ Common Issues & Troubleshooting
1. No Empty Properties Showing
Issue: Report shows no results despite having empty properties
Cause: Availability status flags incorrectly set
Debug:
-- Check property availability status distribution
SELECT savaible, COUNT(*) FROM realestates WHERE del < 2 GROUP BY savaible;
-- Check unit availability status distribution
SELECT cavaible, COUNT(*) FROM realestatesunits WHERE del < 2 GROUP BY cavaible;
-- Verify empty properties exist
SELECT id, realestatename, savaible FROM realestates WHERE del < 2 AND savaible = 0;
2. Units Not Showing for Properties
Issue: Properties appear but without available units
Cause: Unit availability status or relationship issues
Debug:
-- Check property-unit relationships
SELECT r.id, r.realestatename, COUNT(ru.id) as unit_count,
SUM(CASE WHEN ru.cavaible = 0 THEN 1 ELSE 0 END) as available_units
FROM realestates r
LEFT JOIN realestatesunits ru ON r.id = ru.realestateid AND ru.del < 2
WHERE r.del < 2
GROUP BY r.id;
3. Filtering Not Working
Issue: Property or unit filters don't affect results
Cause: Filter parameter handling or query building issues
Debug:
// Add debugging output
$realestateid = filter_input(INPUT_POST, 'realestateid');
$realestateunitid = filter_input(INPUT_POST, 'realestateunitid');
echo "Property filter: " . $realestateid . "<br>";
echo "Unit filter: " . $realestateunitid . "<br>";
echo "Search Query 1: " . $searchQuery . "<br>";
echo "Search Query 2: " . $searchQuery2 . "<br>";
---
๐งช Testing Scenarios
Test Case 1: Basic Empty Properties Display
1. Create test properties with savaible = 0 (empty)
2. Create test properties with savaible = 1 (occupied)
3. Run empty properties report
4. Verify only savaible = 0 properties appear
5. Check property details displayed correctly
Test Case 2: Available Units Display
1. Create test property with multiple units
2. Set some units cavaible = 0 (available)
3. Set some units cavaible = 1 (occupied)
4. Run report
5. Verify only cavaible = 0 units appear under property
6. Check unit details (name, area) displayed
Test Case 3: Property Filtering
1. Create multiple empty properties
2. Apply property filter (specific ID)
3. Verify only specified property appears
4. Test with invalid property ID
5. Verify appropriate handling
Test Case 4: Unit Filtering
1. Create property with multiple available units
2. Apply unit filter (specific ID)
3. Verify only specified unit appears
4. Test filtering across different properties
5. Check unit-property relationship maintained
Test Case 5: Combined Filtering
1. Create multiple properties with various units
2. Apply both property and unit filters
3. Verify intersection logic works correctly
4. Test edge cases (unit not in specified property)
5. Verify no results when filters don't match
---
๐ Related Documentation
- โข CLAUDE.md - PHP 8.2 migration guide
- โข realestateunits.md - Property and unit management
- โข realestateunitsalertsrents.md - Rental alerts
- โข Database Schema Documentation - Table relationships
---
Key Design Principles:
1. Availability Status Separation:
- savaible for supplier/property level availability
- cavaible for client/unit level availability
2. Hierarchical Data Structure:
- Properties contain arrays of available units
- Maintains parent-child relationships
3. Filtering Flexibility:
- Optional filters for targeted monitoring
- Supports both property and unit level filtering
4. Real-time Monitoring:
- Shows current availability status
- No historical data, only current state
5. Soft Delete Protection:
- Only shows active properties/units (del < 2)
- Maintains data integrity
---
Use Cases:
- โข Property managers checking available properties for new suppliers
- โข Rental agents finding available units for clients
- โข Portfolio overview of vacant properties/units
- โข Targeted availability checking for specific properties
- โข Unit-level availability within property complexes
---
Documented By: AI Assistant
Review Status: โ Complete
Next Review: When major changes occur