153 lines
7.5 KiB
OpenEdge ABL
153 lines
7.5 KiB
OpenEdge ABL
public with sharing class PropertyTemplateController {
|
|
|
|
@AuraEnabled(cacheable=true)
|
|
public static List<Property_Template__c> getPropertyTemplates() {
|
|
try {
|
|
return [SELECT Id, Name, Description__c, Preview_Image_URL__c, Tags__c,
|
|
Is_Active__c, Template_Definition__c
|
|
FROM Property_Template__c
|
|
WHERE Is_Active__c = true
|
|
ORDER BY Name];
|
|
} catch (Exception e) {
|
|
throw new AuraHandledException('Error fetching templates: ' + e.getMessage());
|
|
}
|
|
}
|
|
|
|
@AuraEnabled(cacheable=true)
|
|
public static Property_Template__c getPropertyTemplateById(String templateId) {
|
|
try {
|
|
return [SELECT Id, Name, Description__c, Preview_Image_URL__c, Tags__c,
|
|
Is_Active__c, Template_Definition__c
|
|
FROM Property_Template__c
|
|
WHERE Id = :templateId AND Is_Active__c = true
|
|
LIMIT 1];
|
|
} catch (Exception e) {
|
|
throw new AuraHandledException('Error fetching template: ' + e.getMessage());
|
|
}
|
|
}
|
|
|
|
@AuraEnabled(cacheable=true)
|
|
public static List<pcrm__Property__c> getPropertyData() {
|
|
try {
|
|
return [SELECT Id, Name, pcrm__Property_Type__c, pcrm__Sub_Locality_Bayut_Dubizzle__c,
|
|
pcrm__Sale_Price_max__c, pcrm__Rent_Price_max__c, pcrm__Bedrooms__c,
|
|
pcrm__Bathrooms__c, pcrm__Size__c, pcrm__Description_English__c,
|
|
pcrm__Title_English__c, pcrm__Unit_Number__c, pcrm__Completion_Status__c,
|
|
pcrm__Furnished__c, pcrm__View__c, pcrm__Tower_Bayut_Dubizzle__c,
|
|
pcrm__Community_Propertyfinder__c, pcrm__Sub_Community_Propertyfinder__c,
|
|
pcrm__City_Propertyfinder__c, pcrm__City_Bayut_Dubizzle__c
|
|
FROM pcrm__Property__c
|
|
ORDER BY Name];
|
|
} catch (Exception e) {
|
|
throw new AuraHandledException('Error fetching properties: ' + e.getMessage());
|
|
}
|
|
}
|
|
|
|
@AuraEnabled(cacheable=true)
|
|
public static pcrm__Property__c getPropertyById(String propertyId) {
|
|
try {
|
|
return [SELECT Id, Name, pcrm__Property_Type__c, pcrm__Sub_Locality_Bayut_Dubizzle__c,
|
|
pcrm__Sale_Price_max__c, pcrm__Rent_Price_max__c, pcrm__Bedrooms__c,
|
|
pcrm__Bathrooms__c, pcrm__Size__c, pcrm__Description_English__c,
|
|
pcrm__Title_English__c, pcrm__Unit_Number__c, pcrm__Completion_Status__c,
|
|
pcrm__Furnished__c, pcrm__View__c, pcrm__Tower_Bayut_Dubizzle__c,
|
|
pcrm__Community_Propertyfinder__c, pcrm__Sub_Community_Propertyfinder__c,
|
|
pcrm__City_Propertyfinder__c, pcrm__City_Bayut_Dubizzle__c,
|
|
pcrm__Private_Amenities__c, pcrm__Commercial_Amenities__c,
|
|
pcrm__Coordinates__c, pcrm__Build_Year__c, pcrm__Stories__c,
|
|
pcrm__Parking_Spaces__c, pcrm__Lot_Size__c, pcrm__Service_Charge__c
|
|
FROM pcrm__Property__c
|
|
WHERE Id = :propertyId
|
|
LIMIT 1];
|
|
} catch (Exception e) {
|
|
throw new AuraHandledException('Error fetching property: ' + e.getMessage());
|
|
}
|
|
}
|
|
|
|
@AuraEnabled(cacheable=true)
|
|
public static Map<String, Object> getMarketData() {
|
|
try {
|
|
// For now, return default market data since you might not have Market_Analytics__c
|
|
Map<String, Object> result = new Map<String, Object>();
|
|
|
|
// Default Dubai market data
|
|
result.put('marketTrend', 'Rising');
|
|
result.put('roiPotential', '8.5');
|
|
result.put('avgPricePerSqft', '1200');
|
|
result.put('marketDemand', 'High');
|
|
result.put('investmentType', 'Buy-to-Rent');
|
|
result.put('rentalYield', '6.2');
|
|
result.put('investmentHighlights', 'Prime location with high rental demand and capital appreciation potential');
|
|
result.put('locationAdvantages', 'Excellent connectivity, premium amenities, and strong infrastructure');
|
|
result.put('contentModules', ['Market Analysis', 'Investment Overview', 'Location Highlights']);
|
|
result.put('additionalContent', 'Dubai real estate market shows strong growth potential with government initiatives and Expo 2020 legacy');
|
|
|
|
return result;
|
|
} catch (Exception e) {
|
|
throw new AuraHandledException('Error fetching market data: ' + e.getMessage());
|
|
}
|
|
}
|
|
|
|
@AuraEnabled
|
|
public static Map<String, Object> generatePropertyPDF(String propertyData, String templateName, Boolean generatePDF) {
|
|
try {
|
|
// Parse property data
|
|
Map<String, Object> propertyMap = (Map<String, Object>) JSON.deserializeUntyped(propertyData);
|
|
|
|
// Call external Python API for PDF generation
|
|
String apiEndpoint = 'https://YOUR-ACTUAL-IP:8000/api/generate-pdf'; // TODO: Replace with your actual server IP
|
|
|
|
// Prepare request body
|
|
Map<String, Object> requestBody = new Map<String, Object>();
|
|
requestBody.put('property_data', propertyMap);
|
|
requestBody.put('template_name', templateName);
|
|
|
|
// Make HTTP callout to Python API
|
|
Http http = new Http();
|
|
HttpRequest request = new HttpRequest();
|
|
request.setEndpoint(apiEndpoint);
|
|
request.setMethod('POST');
|
|
request.setHeader('Content-Type', 'application/json');
|
|
request.setBody(JSON.serialize(requestBody));
|
|
|
|
HttpResponse response = http.send(request);
|
|
|
|
if (response.getStatusCode() == 200) {
|
|
Map<String, Object> responseMap = (Map<String, Object>) JSON.deserializeUntyped(response.getBody());
|
|
|
|
Map<String, Object> result = new Map<String, Object>();
|
|
result.put('success', true);
|
|
result.put('pdfUrl', responseMap.get('pdf_url'));
|
|
result.put('message', 'PDF generated successfully');
|
|
|
|
return result;
|
|
} else {
|
|
Map<String, Object> result = new Map<String, Object>();
|
|
result.put('success', false);
|
|
result.put('message', 'Failed to generate PDF: ' + response.getStatus());
|
|
return result;
|
|
}
|
|
|
|
} catch (Exception e) {
|
|
Map<String, Object> result = new Map<String, Object>();
|
|
result.put('success', false);
|
|
result.put('message', 'Error: ' + e.getMessage());
|
|
return result;
|
|
}
|
|
}
|
|
|
|
@AuraEnabled
|
|
public static List<Property_Template__c> searchPropertyTemplates(String searchTerm) {
|
|
try {
|
|
String searchQuery = '%' + searchTerm + '%';
|
|
return [SELECT Id, Name, Description__c, Preview_Image_URL__c, Tags__c,
|
|
Is_Active__c, Template_Definition__c
|
|
FROM Property_Template__c
|
|
WHERE Is_Active__c = true
|
|
AND (Name LIKE :searchQuery OR Description__c LIKE :searchQuery OR Tags__c LIKE :searchQuery)
|
|
ORDER BY Name];
|
|
} catch (Exception e) {
|
|
throw new AuraHandledException('Error searching templates: ' + e.getMessage());
|
|
}
|
|
}
|
|
} |