I'm working on visualforce and apex and I got a situation where I want to combine 3 different tables in which handyman's name is common. Also, the specialities custom field on handyman custom object is a multipicklist so I couldn't query this directly from any of openorders or closeorders aggregated query because we cannot group by specialities i.e. a multipicklist. I would be very glad if someone help me out with this.
Note: orders custom object has lookup field on handyman.
Visualforce Page Code
<apex:page standardController="Orders__c" extensions=“HandymanInfo">
<apex:form>
<apex:pageBlock>
<apex:pageBlockSection columns="6" title=“ Handyman Tables">
<apex:pageBlockTable value=“{!lsthandyman}” var=“h”>
<apex:column value=“{!h.Name}">
<apex:facet name="header”>Handyman Name</apex:facet>
</apex:column>
<apex:column value=“{!h.Specialities__c}" >
<apex:facet name="header">Specialities</apex:facet>
</apex:column>
</apex:pageBlockTable>
<apex:pageblocktable value=“{!openorders}" var="oo">
<apex:column value="{!oo[’n']}"><apex:facet name="header”>Handyman Name</apex:facet></apex:column>
<apex:column value="{!oo[’sumopen']}"><apex:facet name="header”>Total Orders Opened</apex:facet></apex:column>
</apex:pageblocktable>
<apex:pageBlockTable value=“{!closeorders}" var="co">
<apex:column value="{!co[’n']}"><apex:facet name="header”>Handyman Name</apex:facet></apex:column>
<apex:column value="{!co[’sumclosed']}"><apex:facet name="header">Total Orders Closed</apex:facet></apex:column>
</apex:pageBlockTable>
</apex:pageBlockSection>
</apex:pageBlock>
</apex:form>
</apex:page>
Controller Class Code:
public class HandymanInfo {
public List<Handyman__c> lsthandyman {get;set;}
Public List<AggregateResult> openorders {get; set;}
Public List<AggregateResult> close orders {get; set;}
public HandymanInfo(ApexPages.StandardController controller) {
lsthandyman = [SELECT Name,Specialities__c FROM Handyman__c ORDER BY Name ASC];
openorders = [SELECT Handyman__r.Name n, COUNT(Name) sumopen FROM Orders__c
WHERE ((Status__c='New') OR (Status__c ='Assigned’) OR (Status__c='Accepted') OR
(Status__c ='In Progress'))
GROUP BY Handyman__r.Name
ORDER BY Handyman__r.Name ASC];
closeorders = [SELECT Handyman__r.Name n, COUNT(Name) sumclosed FROM Orders__c
WHERE ((Status__c='Completed') OR (Status__c='In Review’) OR (Status__c ='Paid'))
GROUP BY Handyman__r.Name
ORDER BY Handyman__r.Name ASC];
}
}