Thursday, 31 May 2018

Omniscript - Typeahead with Time Slots

global with sharing class CreateAppointmentOSController implements vlocity_ins.VlocityOpenInterface {
    public Boolean invokeMethod(String methodName, Map<String, Object> input, Map<String, Object> outMap, Map<String, Object> options){
        boolean flag=false;
        System.debug('---invokeMethod---');
        System.debug('input: '+input);
        System.debug('methodName: '+methodName);
        if(methodName.equals('getFreeSlots')){
            flag=getFreeSlots(input,outMap,options);
        }
        return flag;
    }
    public boolean getFreeSlots(Map<String, Object> input, Map<String, Object> outMap, Map<String, Object> options){
        boolean flag=true;
        Map<String,Object> AppointmentDetails=new Map<String,Object>();
        if(input.containsKey('AppointmentDetails'))
            AppointmentDetails=(Map<String,Object>)input.get('AppointmentDetails');
        Date startDate;
        if(AppointmentDetails.containsKey('StartDate')){
            String startDatestr=(String)AppointmentDetails.get('StartDate');
            //Take only date from 2018-05-30T18:30:00.000Z
            if(startDatestr.contains('T')){
                startDate=Date.valueOf(startDatestr.split('T')[0]);
            }
        }
        String ownerId=UserInfo.getUserId();
        List<Map<String,String>> lookupoptions=new List<Map<String,String>>();
        List<String> ctlist=new List<String>();
        List<Event> evtlist=EmptyEventSlotManager.FindAllfreeSlots(startDate, ownerId);       
        String[] endTime;
        String[] startTime;
       
        for(Event e:evtlist){
            try{
                startTime=String.valueOf(e.ActivityDateTime).subStringAfter(' ').split(':'); //get hour
                endTime=String.valueOf(e.EndDateTime).subStringAfter(' ').split(':'); //get hour
            }catch(Exception ex){
                system.debug('Exception: '+ex);
            }
           
            String tm='';
            if(Integer.valueOf(endTime[0])<=12)
                tm=' AM';
            else
                tm=' PM';
           
            Integer hh=Integer.valueOf(startTime[0]);
            Integer mm=Integer.valueOf(startTime[1]);                   
            String mmstr=String.valueOf(mm);
            for(integer i=1;i<=4;i++){  // 4x1/2 hr = 2hrs 
                if(mm==0)                   
                    mmstr=String.valueOf(mm+'0');
                lookupoptions.add(new Map<String,String>{'OwnerId'=>String.valueOf(ownerId),'startTime'=>String.valueOf(hh+':'+mmstr+tm)});
                mm+=30;
                //1 hour completed
                if(mm>=60){
                    mm=0;
                    hh++;
                }
                mmstr=String.valueOf(mm);
            }
        }
        outMap.put('suggestions',lookupoptions);
        return flag;
    }
}

No comments:

Post a Comment