321 lines
17 KiB
OpenEdge ABL
321 lines
17 KiB
OpenEdge ABL
public with sharing class PropertyDataController {
|
|
|
|
@AuraEnabled(cacheable=true)
|
|
public static List<pcrm__Property__c> getProperties() {
|
|
try {
|
|
System.debug('=== FETCHING ALL PROPERTIES FROM PCRM OBJECT ===');
|
|
|
|
// Query using fields that are actually available in pcrm__Property__c
|
|
String query = 'SELECT Id, Name, ' +
|
|
'pcrm__Property_Type__c, pcrm__Status__c, ' +
|
|
'pcrm__Bathrooms__c, pcrm__Bedrooms__c, pcrm__Size__c, ' +
|
|
'pcrm__Sale_Price_min__c, pcrm__Sale_Price_max__c, ' +
|
|
'pcrm__Rent_Price_min__c, pcrm__Rent_Price_max__c, ' +
|
|
'pcrm__Description_English__c, pcrm__Title_English__c, ' +
|
|
'pcrm__City_Bayut_Dubizzle__c, pcrm__Community_Propertyfinder__c, ' +
|
|
'pcrm__Furnished__c, pcrm__Floor__c, pcrm__Build_Year__c, ' +
|
|
'pcrm__Parking_Spaces__c, pcrm__Offering_Type__c, ' +
|
|
'pcrm__Unit_Number__c, pcrm__Locality_Bayut_Dubizzle__c, ' +
|
|
'pcrm__Sub_Locality_Bayut_Dubizzle__c, pcrm__Tower_Bayut_Dubizzle__c, ' +
|
|
'pcrm__Sub_Community_Propertyfinder__c, pcrm__Property_Name_Propertyfinder__c, ' +
|
|
'pcrm__City_Propertyfinder__c, ' +
|
|
'pcrm__Rent_Available_From__c, pcrm__Rent_Available_To__c, ' +
|
|
'Private_Amenities__c, ' +
|
|
'Contact__c, Contact__r.FirstName, Contact__r.LastName, Contact__r.Email, Contact__r.Phone, ' +
|
|
'Email__c, Phone__c, ' +
|
|
'CreatedBy.Name, LastModifiedBy.Name, Owner.Name, ' +
|
|
'CreatedDate, LastModifiedDate ' +
|
|
'FROM pcrm__Property__c ' +
|
|
'ORDER BY Name ASC';
|
|
|
|
List<pcrm__Property__c> properties = Database.query(query);
|
|
|
|
System.debug('=== PROPERTIES FETCHED FROM PCRM ===');
|
|
System.debug('Total properties found: ' + properties.size());
|
|
|
|
// Log first property details for debugging
|
|
if (!properties.isEmpty()) {
|
|
pcrm__Property__c firstProp = properties[0];
|
|
System.debug('First property details:');
|
|
System.debug('Name: ' + firstProp.Name);
|
|
System.debug('Type: ' + firstProp.pcrm__Property_Type__c);
|
|
System.debug('Status: ' + firstProp.pcrm__Status__c);
|
|
System.debug('Bedrooms: ' + firstProp.pcrm__Bedrooms__c);
|
|
System.debug('Bathrooms: ' + firstProp.pcrm__Bathrooms__c);
|
|
System.debug('Size: ' + firstProp.pcrm__Size__c);
|
|
System.debug('Sale Price Min: ' + firstProp.pcrm__Sale_Price_min__c);
|
|
System.debug('Sale Price Max: ' + firstProp.pcrm__Sale_Price_max__c);
|
|
System.debug('Rent Price Min: ' + firstProp.pcrm__Rent_Price_min__c);
|
|
System.debug('Rent Price Max: ' + firstProp.pcrm__Rent_Price_max__c);
|
|
System.debug('City: ' + firstProp.pcrm__City_Bayut_Dubizzle__c);
|
|
System.debug('Community: ' + firstProp.pcrm__Community_Propertyfinder__c);
|
|
System.debug('Description: ' + firstProp.pcrm__Description_English__c);
|
|
System.debug('Title: ' + firstProp.pcrm__Title_English__c);
|
|
System.debug('Furnished: ' + firstProp.pcrm__Furnished__c);
|
|
System.debug('Floor: ' + firstProp.pcrm__Floor__c);
|
|
System.debug('Build Year: ' + firstProp.pcrm__Build_Year__c);
|
|
System.debug('Parking Spaces: ' + firstProp.pcrm__Parking_Spaces__c);
|
|
System.debug('Offering Type: ' + firstProp.pcrm__Offering_Type__c);
|
|
System.debug('Private Amenities: ' + firstProp.Private_Amenities__c);
|
|
}
|
|
|
|
return properties;
|
|
|
|
} catch (Exception e) {
|
|
System.debug('Error fetching properties: ' + e.getMessage());
|
|
System.debug('Stack trace: ' + e.getStackTraceString());
|
|
throw new AuraHandledException('Failed to fetch properties: ' + e.getMessage());
|
|
}
|
|
}
|
|
|
|
@AuraEnabled(cacheable=true)
|
|
public static pcrm__Property__c getPropertyDetails(String propertyId) {
|
|
try {
|
|
System.debug('=== FETCHING COMPLETE PROPERTY DETAILS FROM PCRM ===');
|
|
System.debug('Property ID: ' + propertyId);
|
|
|
|
// Query using fields that are actually available in pcrm__Property__c
|
|
String query = 'SELECT Id, Name, ' +
|
|
'pcrm__Property_Type__c, pcrm__Status__c, ' +
|
|
'pcrm__Bathrooms__c, pcrm__Bedrooms__c, pcrm__Size__c, ' +
|
|
'pcrm__Sale_Price_min__c, pcrm__Sale_Price_max__c, ' +
|
|
'pcrm__Rent_Price_min__c, pcrm__Rent_Price_max__c, ' +
|
|
'pcrm__Description_English__c, pcrm__Title_English__c, ' +
|
|
'pcrm__City_Bayut_Dubizzle__c, pcrm__Community_Propertyfinder__c, ' +
|
|
'pcrm__Furnished__c, pcrm__Floor__c, pcrm__Build_Year__c, ' +
|
|
'pcrm__Parking_Spaces__c, pcrm__Offering_Type__c, ' +
|
|
'pcrm__Unit_Number__c, pcrm__Locality_Bayut_Dubizzle__c, ' +
|
|
'pcrm__Sub_Locality_Bayut_Dubizzle__c, pcrm__Tower_Bayut_Dubizzle__c, ' +
|
|
'pcrm__Sub_Community_Propertyfinder__c, pcrm__Property_Name_Propertyfinder__c, ' +
|
|
'pcrm__City_Propertyfinder__c, ' +
|
|
'pcrm__Rent_Available_From__c, pcrm__Rent_Available_To__c, ' +
|
|
'Private_Amenities__c, ' +
|
|
'Contact__c, Contact__r.FirstName, Contact__r.LastName, Contact__r.Email, Contact__r.Phone, ' +
|
|
'Email__c, Phone__c, ' +
|
|
'CreatedBy.Name, LastModifiedBy.Name, Owner.Name, ' +
|
|
'CreatedDate, LastModifiedDate ' +
|
|
'FROM pcrm__Property__c ' +
|
|
'WHERE Id = :propertyId';
|
|
|
|
pcrm__Property__c property = Database.query(query);
|
|
|
|
if (property != null) {
|
|
System.debug('=== PROPERTY DETAILS FETCHED FROM PCRM ===');
|
|
System.debug('Name: ' + property.Name);
|
|
System.debug('Type: ' + property.pcrm__Property_Type__c);
|
|
System.debug('Status: ' + property.pcrm__Status__c);
|
|
System.debug('Bedrooms: ' + property.pcrm__Bedrooms__c);
|
|
System.debug('Bathrooms: ' + property.pcrm__Bathrooms__c);
|
|
System.debug('Size: ' + property.pcrm__Size__c);
|
|
System.debug('Sale Price Min: ' + property.pcrm__Sale_Price_min__c);
|
|
System.debug('Sale Price Max: ' + property.pcrm__Sale_Price_max__c);
|
|
System.debug('Rent Price Min: ' + property.pcrm__Rent_Price_min__c);
|
|
System.debug('Rent Price Max: ' + property.pcrm__Rent_Price_max__c);
|
|
System.debug('City: ' + property.pcrm__City_Bayut_Dubizzle__c);
|
|
System.debug('Community: ' + property.pcrm__Community_Propertyfinder__c);
|
|
System.debug('Description: ' + property.pcrm__Description_English__c);
|
|
System.debug('Title: ' + property.pcrm__Title_English__c);
|
|
System.debug('Furnished: ' + property.pcrm__Furnished__c);
|
|
System.debug('Floor: ' + property.pcrm__Floor__c);
|
|
System.debug('Build Year: ' + property.pcrm__Build_Year__c);
|
|
System.debug('Parking Spaces: ' + property.pcrm__Parking_Spaces__c);
|
|
System.debug('Offering Type: ' + property.pcrm__Offering_Type__c);
|
|
System.debug('Private Amenities: ' + property.Private_Amenities__c);
|
|
}
|
|
|
|
return property;
|
|
|
|
} catch (Exception e) {
|
|
System.debug('Error fetching property details: ' + e.getMessage());
|
|
System.debug('Stack trace: ' + e.getStackTraceString());
|
|
throw new AuraHandledException('Failed to fetch property details: ' + e.getMessage());
|
|
}
|
|
}
|
|
|
|
@AuraEnabled(cacheable=true)
|
|
public static Integer getPropertyCount() {
|
|
try {
|
|
return [SELECT COUNT() FROM pcrm__Property__c];
|
|
} catch (Exception e) {
|
|
System.debug('Error getting property count: ' + e.getMessage());
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
@AuraEnabled(cacheable=true)
|
|
public static List<Map<String, Object>> getPropertyImages(String propertyId) {
|
|
try {
|
|
System.debug('=== FETCHING PROPERTY IMAGES ===');
|
|
System.debug('Property ID: ' + propertyId);
|
|
|
|
List<Map<String, Object>> images = new List<Map<String, Object>>();
|
|
|
|
// Query Image Genie records for this property
|
|
List<pcrm__Image_Genie__c> imageRecords = [
|
|
SELECT Id, Name, pcrm__Category__c, pcrm__Title__c, Public_URL__c, pcrm__Property__c
|
|
FROM pcrm__Image_Genie__c
|
|
WHERE pcrm__Property__c = :propertyId
|
|
ORDER BY pcrm__Category__c, Name
|
|
];
|
|
|
|
System.debug('Found ' + imageRecords.size() + ' image records');
|
|
|
|
for (pcrm__Image_Genie__c img : imageRecords) {
|
|
Map<String, Object> imageData = new Map<String, Object>();
|
|
imageData.put('id', img.Id);
|
|
imageData.put('name', img.pcrm__Title__c);
|
|
imageData.put('category', img.pcrm__Category__c);
|
|
imageData.put('url', img.Public_URL__c);
|
|
images.add(imageData);
|
|
|
|
System.debug('Image: ' + img.pcrm__Title__c + ' - Category: ' + img.pcrm__Category__c + ' - URL: ' + img.Public_URL__c);
|
|
}
|
|
|
|
return images;
|
|
|
|
} catch (Exception e) {
|
|
System.debug('Error fetching property images: ' + e.getMessage());
|
|
System.debug('Stack trace: ' + e.getStackTraceString());
|
|
throw new AuraHandledException('Failed to fetch property images: ' + e.getMessage());
|
|
}
|
|
}
|
|
|
|
@AuraEnabled(cacheable=true)
|
|
public static User getAgentData(String propertyId) {
|
|
try {
|
|
System.debug('=== FETCHING AGENT DATA FOR PROPERTY ===');
|
|
System.debug('Property ID: ' + propertyId);
|
|
|
|
// First, get the property to find the related agent/owner
|
|
pcrm__Property__c property = [
|
|
SELECT Id, OwnerId, CreatedById, LastModifiedById, Contact__c, Contact__r.OwnerId
|
|
FROM pcrm__Property__c
|
|
WHERE Id = :propertyId
|
|
LIMIT 1
|
|
];
|
|
|
|
if (property == null) {
|
|
System.debug('Property not found for ID: ' + propertyId);
|
|
return null;
|
|
}
|
|
|
|
// Try to get agent data from different sources in priority order
|
|
User agentUser = null;
|
|
|
|
// Priority 1: Contact's owner (if contact exists)
|
|
if (property.Contact__c != null && property.Contact__r.OwnerId != null) {
|
|
try {
|
|
agentUser = [
|
|
SELECT Id, Name, FirstName, LastName, Email, Phone, MobilePhone,
|
|
Title, Department, CompanyName, SmallPhotoUrl, FullPhotoUrl,
|
|
Profile.Name, UserRole.Name
|
|
FROM User
|
|
WHERE Id = :property.Contact__r.OwnerId
|
|
AND IsActive = true
|
|
LIMIT 1
|
|
];
|
|
System.debug('Found agent from Contact Owner: ' + agentUser?.Name);
|
|
} catch (Exception e) {
|
|
System.debug('Error fetching Contact Owner: ' + e.getMessage());
|
|
}
|
|
}
|
|
|
|
// Priority 2: Property Owner (if not found above)
|
|
if (agentUser == null && property.OwnerId != null) {
|
|
try {
|
|
agentUser = [
|
|
SELECT Id, Name, FirstName, LastName, Email, Phone, MobilePhone,
|
|
Title, Department, CompanyName, SmallPhotoUrl, FullPhotoUrl,
|
|
Profile.Name, UserRole.Name
|
|
FROM User
|
|
WHERE Id = :property.OwnerId
|
|
AND IsActive = true
|
|
LIMIT 1
|
|
];
|
|
System.debug('Found agent from Property Owner: ' + agentUser?.Name);
|
|
} catch (Exception e) {
|
|
System.debug('Error fetching Property Owner: ' + e.getMessage());
|
|
}
|
|
}
|
|
|
|
// Priority 3: Property Creator (if not found above)
|
|
if (agentUser == null && property.CreatedById != null) {
|
|
try {
|
|
agentUser = [
|
|
SELECT Id, Name, FirstName, LastName, Email, Phone, MobilePhone,
|
|
Title, Department, CompanyName, SmallPhotoUrl, FullPhotoUrl,
|
|
Profile.Name, UserRole.Name
|
|
FROM User
|
|
WHERE Id = :property.CreatedById
|
|
AND IsActive = true
|
|
LIMIT 1
|
|
];
|
|
System.debug('Found agent from Property Creator: ' + agentUser?.Name);
|
|
} catch (Exception e) {
|
|
System.debug('Error fetching Property Creator: ' + e.getMessage());
|
|
}
|
|
}
|
|
|
|
if (agentUser != null) {
|
|
System.debug('=== AGENT DATA FETCHED ===');
|
|
System.debug('Agent Name: ' + agentUser.Name);
|
|
System.debug('Agent Email: ' + agentUser.Email);
|
|
System.debug('Agent Phone: ' + agentUser.Phone);
|
|
System.debug('Agent Title: ' + agentUser.Title);
|
|
System.debug('Agent Department: ' + agentUser.Department);
|
|
} else {
|
|
System.debug('No agent found for property: ' + propertyId);
|
|
}
|
|
|
|
return agentUser;
|
|
|
|
} catch (Exception e) {
|
|
System.debug('Error fetching agent data: ' + e.getMessage());
|
|
System.debug('Stack trace: ' + e.getStackTraceString());
|
|
throw new AuraHandledException('Failed to fetch agent data: ' + e.getMessage());
|
|
}
|
|
}
|
|
|
|
@AuraEnabled(cacheable=true)
|
|
public static pcrm__Listing__c getListingData(String propertyId) {
|
|
try {
|
|
System.debug('=== FETCHING LISTING DATA BY PROPERTY ===');
|
|
System.debug('Property ID: ' + propertyId);
|
|
|
|
// Query listing with related property and agent data using property ID
|
|
String query = 'SELECT Id, Name, ' +
|
|
'Property__r.Id, Property__r.Name, ' +
|
|
'Listing_Agent__r.Id, Listing_Agent__r.Name, Listing_Agent__r.Email, Listing_Agent__r.Phone, Listing_Agent__r.Title, ' +
|
|
'Select_Agent__r.Id, Select_Agent__r.Name, Select_Agent__r.Email, Select_Agent__r.Phone, Select_Agent__r.Title ' +
|
|
'FROM pcrm__Listing__c ' +
|
|
'WHERE Property__c = :propertyId ' +
|
|
'ORDER BY CreatedDate DESC LIMIT 1';
|
|
|
|
List<pcrm__Listing__c> listings = Database.query(query);
|
|
pcrm__Listing__c listing = listings.isEmpty() ? null : listings[0];
|
|
|
|
if (listing != null) {
|
|
System.debug('=== LISTING DATA FETCHED ===');
|
|
System.debug('Listing Name: ' + listing.Name);
|
|
System.debug('Property ID: ' + listing.Property__r?.Id);
|
|
System.debug('Property Name: ' + listing.Property__r?.Name);
|
|
System.debug('Listing Agent ID: ' + listing.Listing_Agent__r?.Id);
|
|
System.debug('Listing Agent Name: ' + listing.Listing_Agent__r?.Name);
|
|
System.debug('Listing Agent Email: ' + listing.Listing_Agent__r?.Email);
|
|
System.debug('Listing Agent Phone: ' + listing.Listing_Agent__r?.Phone);
|
|
System.debug('Select Agent ID: ' + listing.Select_Agent__r?.Id);
|
|
System.debug('Select Agent Name: ' + listing.Select_Agent__r?.Name);
|
|
} else {
|
|
System.debug('No listing found for Property ID: ' + propertyId);
|
|
}
|
|
|
|
return listing;
|
|
|
|
} catch (Exception e) {
|
|
System.debug('Error fetching listing data: ' + e.getMessage());
|
|
System.debug('Stack trace: ' + e.getStackTraceString());
|
|
throw new AuraHandledException('Failed to fetch listing data: ' + e.getMessage());
|
|
}
|
|
}
|
|
}
|