public override string getQuery(AppointmentBookingRequest i_Request = null, AdditionalObjectsUtils.eAdditionalObjectQuery i_AdditionalObjQuery = default) { ServiceParent parent = null; foreach (ServiceParent parentObj in m_ABData.ServiceParent.Values) { if (parentObj.Id == m_ABData.ServiceToSchedule.ParentRecordId) { parent = parentObj; break; } } if (parent == null) { throw new Exception("Service parent was not retrieved properly"); } //TODO: make generic for all types of parent string visitingHoursCalId = parent.VisitingHours__c; if (visitingHoursCalId == null) { return(String.Empty); } string query = "Select id,TimeZone, " + "(Select DayOfWeek, Type, StartTime, EndTime From TimeSlots order by DayOfWeek, StartTime) " + $"From OperatingHours where id = '{visitingHoursCalId}' limit 1]"; return(formatQueryString(query)); }
public override string getQuery(AppointmentBookingRequest i_Request = null, AdditionalObjectsUtils.eAdditionalObjectQuery i_AdditionalObjQuery = default) { string query; string serviceIdStr = formatIdList(new List <string>() { i_Request.ServiceID }); if (m_TimeDependencies == null) { query = "SELECT Id, Root_Service_Appointment__c, Dependency__c, Same_Resource__c, Service_Appointment_1__c, " + "Service_Appointment_2__c FROM Time_Dependency__c " + $"WHERE Service_Appointment_1__c = '{i_Request.ServiceID}' OR Service_Appointment_2__c = '{i_Request.ServiceID}'"; } else if (m_TimeDependencies.Any()) { query = "SELECT Id, Root_Service_Appointment__c, Dependency__c, Same_Resource__c, Service_Appointment_1__c, " + $"Service_Appointment_2__c FROM Time_Dependency__c WHERE Root_Service_Appointment__c IN ({serviceIdStr})"; } else { return(null); } return(formatQueryString(query)); }
public override void Deserialize(string i_QueryResult, AppointmentBookingData i_ABData, AdditionalObjectsUtils.eAdditionalObjectQuery i_AdditionalObjQuery = default, bool async = false) { DeserializedQueryResult deserializedQuery = JsonConvert.DeserializeObject <DeserializedQueryResult>(i_QueryResult); i_ABData.VisitingHours = deserializedQuery.records; }
public override string getQuery(AppointmentBookingRequest i_Request = null, AdditionalObjectsUtils.eAdditionalObjectQuery i_AdditionalObjQuery = default) { //TODO: WO priority and WOLI priority fields need to be queried. Field names are in the Logic settings string query = $"select id, MinimumCrewSize, scheduling_priority__c {addRequiredFiledsByRulesAndObjectives()} from WorkOrder where Id = '{m_ABData.ServiceToSchedule.ParentRecordId}'"; query = formatQueryString(query); return(query); }
public override void Deserialize(string i_QueryResult, AppointmentBookingData i_ABData, AdditionalObjectsUtils.eAdditionalObjectQuery i_AdditionalObjQuery = default, bool async = false) { //TODO: add support for long responses that has to be pulled with identifier DeserializedQueryResult deserializedQuery = JsonConvert.DeserializeObject <DeserializedQueryResult>(i_QueryResult); i_ABData.ObjectivesByDevName = parseAdditionalData(deserializedQuery.records); }
public override string getQuery(AppointmentBookingRequest i_Request = null, AdditionalObjectsUtils.eAdditionalObjectQuery i_AdditionalObjQuery = default) { string objectivesQuery = "SELECT Service_Goal__r.Ignore_Home_Base_Coordinates__c,Service_Goal__r.Resource_Priority_Field__c," + "Service_Goal__r.Prioritize_Resource__c,Service_Goal__r.Object_Group_Field__c, Service_Goal__r.Resource_Group_Field__c," + "Weight__c, Service_Goal__r.RecordType.DeveloperName, Service_Goal__r.ID, Service_Goal__r.Name FROM Scheduling_Policy_Goal__c " + $"WHERE Scheduling_Policy__c = '{i_Request.PolicyId}' " + "AND (NOT Service_Goal__r.RecordType.DeveloperName = 'Objective_Custom_Logic') order by Weight__c DESC"; return(formatQueryString(objectivesQuery)); }
public override string getQuery(AppointmentBookingRequest i_Request = null, AdditionalObjectsUtils.eAdditionalObjectQuery i_AdditionalObjQuery = default) { string rulesQuery = "SELECT Maximum_Travel_From_Home__c,Maximum_Travel_From_Home_Type__c,Id,Enable_Overtime__c,Name,Object_Group_Field__c, Resource_Property__c" + ",Resource_Group_Field__c, RecordType.DeveloperName ,Start_of_Day__c,Break_Start__c,Break_Duration__c,Is_Fixed_Gap__c,Minimum_Gap__c," + $" {addRRequiredRuleFields()} FROM Work_Rule__c " + $"WHERE Id in (SELECT Work_Rule__c FROM Scheduling_Policy_Work_Rule__c WHERE Scheduling_Policy__c = '{i_Request.PolicyId}')"; return(formatQueryString(rulesQuery)); }
public override void Deserialize(string i_QueryResult, AppointmentBookingData i_ABData, AdditionalObjectsUtils.eAdditionalObjectQuery i_AdditionalObjQuery = default, bool async = false) { DeserializedQueryResult deserializedQuery = JsonConvert.DeserializeObject <DeserializedQueryResult>(i_QueryResult); foreach (PermissionSetAssignment record in deserializedQuery.records) { m_RelatedRecordIds.Remove(record.AssigneeId); } i_ABData.UnLicensedUsers = m_RelatedRecordIds; }
public override string getQuery(AppointmentBookingRequest i_Request = null, AdditionalObjectsUtils.eAdditionalObjectQuery i_AdditionalObjQuery = default) { string serviceIdStr = formatIdList(m_MSTServiceIds.ToList()); string query = "SELECT Id,Related_Service__c,Same_Day__c,Same_Resource__c,Time_Dependency__c," + "AppointmentNumber,SchedStartTime, SchedEndTime,ServiceTerritory.OperatingHours.TimeZone, " + "ServiceTerritoryId, Duration, ParentRecordId, (SELECT AssignedResourceNumber" + ",ServiceResourceId,EstimatedTravelTimeFrom__c,EstimatedTravelTime,EstimatedTravelDistanceFrom__c," + " EstimatedTravelDistanceTo__c FROM ServiceResources ORDER BY CreatedDate ASC) " + $"FROM ServiceAppointment WHERE Id in ({serviceIdStr})"; return(formatQueryString(query)); }
public override string getQuery(AppointmentBookingRequest i_Request = null, AdditionalObjectsUtils.eAdditionalObjectQuery i_AdditionalObjQuery = default) { ServiceAppointment service = m_ABData.ServiceToSchedule; DateTime minDate = service.EarliestStartTime.Value.AddDays(-7); DateTime maxDate = service.DueDate.Value.AddDays(7); string resourcesIds = formatIdList(m_ABData.STMResourcesIDs.ToList()); string query = "select Id, name, IsActive, IsCapacityBased, Efficiency__c, Travel_Speed__c, " + "RelatedRecordId, ResourceType, ServiceCrewId, (select ServiceResourceId," + "StartDate,EndDate,ServiceCrewId from ServiceCrewMembers " + $"where ((StartDate <= {formatDate(maxDate)}) AND (EndDate = null OR EndDate >= {formatDate(minDate)}))) {addRequiredFields(minDate, maxDate)}" + $" from ServiceResource Where IsActive = true And Id in ({resourcesIds})"; return(formatQueryString(query)); }
public override void Deserialize(string i_QueryResult, AppointmentBookingData i_ABData, AdditionalObjectsUtils.eAdditionalObjectQuery i_AdditionalObjQuery = default, bool async = false) { DeserializedQueryResult deserializedQuery = JsonConvert.DeserializeObject <DeserializedQueryResult>(i_QueryResult); if (m_TimeDependencies == null) { m_TimeDependencies = new List <Time_Dependency__c>(deserializedQuery.records); m_Roots = new HashSet <string>(); foreach (Time_Dependency__c dependency in m_TimeDependencies) { m_Roots.Add(dependency.Root_Service_Appointment__c); } } else { if (i_ABData.TimeDependeciesByRootId == null) { i_ABData.TimeDependeciesByRootId = new Dictionary <string, List <Time_Dependency__c> >(); } foreach (Time_Dependency__c dependency in deserializedQuery.records) { if (!m_TimeDependencies.Contains(dependency)) { m_TimeDependencies.Add(dependency); } } foreach (IGrouping <string, Time_Dependency__c> timeDependencies in m_TimeDependencies.GroupBy(dependency => dependency.Root_Service_Appointment__c)) { if (!i_ABData.TimeDependeciesByRootId.ContainsKey(timeDependencies.Key)) { i_ABData.TimeDependeciesByRootId[timeDependencies.Key] = new List <Time_Dependency__c>(); } foreach (Time_Dependency__c dependency in timeDependencies) { i_ABData.TimeDependeciesByRootId[timeDependencies.Key].Add(dependency); } } } }
public override string getQuery(AppointmentBookingRequest i_Request = null, AdditionalObjectsUtils.eAdditionalObjectQuery i_AdditionalObjQuery = default) { m_RelatedRecordIds = new HashSet <string>(); foreach (string resourceId in m_ABData.STMResourcesIDs) { if (m_ABData.CandidatesById.ContainsKey(resourceId)) { m_RelatedRecordIds.Add(m_ABData.CandidatesById[resourceId].UserId); } } string query = $"Select AssigneeId From PermissionSetAssignment Where AssigneeId in ({formatIdList(m_RelatedRecordIds.ToList())}) " + "and PermissionSet.IsOwnedByProfile = false and" + " PermissionSet.PermissionsFieldServiceScheduling = true"; return(formatQueryString(query)); }
public override void Deserialize(string i_QueryResult, AppointmentBookingData i_ABData, AdditionalObjectsUtils.eAdditionalObjectQuery i_AdditionalObjQuery = default, bool async = false) { //TODO: add support for long responses that has to be pulled with identifier DeserializedQueryResult deserializedQuery = JsonConvert.DeserializeObject <DeserializedQueryResult>(i_QueryResult); parseAdditionalData(deserializedQuery.records); i_ABData.RulesByDevName = new Dictionary <string, List <Work_Rule__c> >(); foreach (Work_Rule__c workRule in deserializedQuery.records) { if (!i_ABData.RulesByDevName.ContainsKey(workRule.DeveloperName)) { i_ABData.RulesByDevName[workRule.DeveloperName] = new List <Work_Rule__c>(); } i_ABData.RulesByDevName[workRule.DeveloperName].Add(workRule); } }
public override string getQuery(AppointmentBookingRequest i_Request = null, AdditionalObjectsUtils.eAdditionalObjectQuery i_AdditionalObjQuery = default) { string serviceIdStr = formatIdList(new List <string>() { i_Request.ServiceID }); string query = "SELECT id,status,related_service__c,same_day__c,same_resource__c,time_dependency__c,appointmentnumber" + ",duedate,earlieststarttime,schedstarttime,schedendtime,duration,durationtype,latitude,longitude," + "internalslrgeolocation__latitude__s,internalslrgeolocation__longitude__s,serviceterritoryid," + "schedule_over_lower_priority_appointment__c,use_async_logic__c,mdt_operational_time__c,ismultiday__c" + ",parentrecordid, parentrecordtype,serviceterritory.operatinghours.timezone," + "(SELECT estimated_travel_time_to_source__c," + "estimated_travel_time_from_source__c,assignedresourcenumber,serviceresourceid,estimatedtraveltimefrom__c," + "estimatedtraveltime,estimatedtraveldistancefrom__c,estimatedtraveldistanceto__c,serviceresource.servicecrewid," + "serviceresource.resourcetype,serviceresource.iscapacitybased" + " FROM serviceresources ORDER BY serviceresource.resourcetype desc nulls last, createddate asc nulls last)" + ",(SELECT id FROM service_appointments__r),mds_calculated_length__c {0}" + $" FROM ServiceAppointment WHERE id in ({serviceIdStr})"; /* * query = * "select id,status,related_service__c,same_day__c,same_resource__c,time_dependency__c,appointmentnumber,duedate" + * ",earlieststarttime,schedstarttime,schedendtime,duration,durationtype,latitude,longitude," + * "internalslrgeolocation__latitude__s,internalslrgeolocation__longitude__s,serviceterritoryid," + * "schedule_over_lower_priority_appointment__c,use_async_logic__c,mdt_operational_time__c," + * "ismultiday__c,parentrecordid,serviceterritory.operatinghours.timezone," + * "(select estimated_travel_time_to_source__c,estimated_travel_time_from_source__c,assignedresourcenumber," + * "serviceresourceid,estimatedtraveltimefrom__c,estimatedtraveltime,estimatedtraveldistancefrom__c," + * "estimatedtraveldistanceto__c,serviceresource.servicecrewid,serviceresource.resourcetype,serviceresource.iscapacitybased " + * "from serviceresources order by serviceresource.resourcetype desc nulls last, createddate asc nulls last)" + * ",(select id from service_appointments__r),arrivalwindowstarttime,arrivalwindowendtime," + * $"mds_calculated_length__c from ServiceAppointment where id in ({serviceIdStr})"; */ string requiredRuleFields = addRRequiredRuleFields(query); query = string.Format(query, requiredRuleFields); return(formatQueryString(query)); }
public override void Deserialize(string i_QueryResult, AppointmentBookingData i_ABData, AdditionalObjectsUtils.eAdditionalObjectQuery i_AdditionalObjQuery = default, bool async = false) { //TODO: implement this generic for WOLI and Account parents also DeserializedQueryResult deserializedQuery = JsonConvert.DeserializeObject <DeserializedQueryResult>(i_QueryResult); foreach (ServiceParent parent in deserializedQuery.records) { if (parent.SkillRequirements == null) { parent.SkillRequirements = new List <SkillRequirement>(); } foreach (SkillRequirement skillReq in parent.skillRequirementsCollection.records) { parent.SkillRequirements.Add(skillReq); } } i_ABData.ServiceParent = deserializedQuery.records.ToDictionary(parent => parent.Id); }
public override void Deserialize(string i_QueryResult, AppointmentBookingData i_ABData, AdditionalObjectsUtils.eAdditionalObjectQuery i_AdditionalObjQuery = default, bool async = false) { DeserializedQueryResult deserializedQuery = JsonConvert.DeserializeObject <DeserializedQueryResult>(i_QueryResult); ServiceAppointmentUtils serviceUtils = new ServiceAppointmentUtils(i_ABData); Dictionary <string, ServiceAppointment> deserializedServices = serviceUtils.parseAdditionalData(deserializedQuery.records); foreach (KeyValuePair <string, List <Time_Dependency__c> > dependencyTreeByRoot in i_ABData.TimeDependeciesByRootId) { foreach (Time_Dependency__c dependency in dependencyTreeByRoot.Value) { if (!i_ABData.ServicesById.ContainsKey(dependency.Service_Appointment_1__c)) { i_ABData.ServicesById[dependency.Service_Appointment_1__c] = deserializedServices[dependency.Service_Appointment_1__c]; } dependency.Service_Appointment_1__r = deserializedServices[dependency.Service_Appointment_1__c]; if (!i_ABData.ServicesById.ContainsKey(dependency.Service_Appointment_2__c)) { i_ABData.ServicesById[dependency.Service_Appointment_2__c] = deserializedServices[dependency.Service_Appointment_2__c]; } dependency.Service_Appointment_2__r = deserializedServices[dependency.Service_Appointment_2__c]; if (dependency.Service_Appointment_1__c == dependency.Root_Service_Appointment__c) { dependency.Root_Service_Appointment__r = deserializedServices[dependency.Service_Appointment_1__c]; } if (dependency.Service_Appointment_2__c == dependency.Root_Service_Appointment__c) { dependency.Root_Service_Appointment__r = deserializedServices[dependency.Service_Appointment_2__c]; } } } }
public override void Deserialize(string i_QueryResult, AppointmentBookingData i_ABData, AdditionalObjectsUtils.eAdditionalObjectQuery i_AdditionalObjQuery = default, bool async = false) { DeserializedQueryResult deserializedQuery = JsonConvert.DeserializeObject <DeserializedQueryResult>(i_QueryResult); foreach (ServiceTerritoryMember stm in deserializedQuery.records) { if (stm.m_JSONAdditionalData.TryGetValue("ServiceResource", out var resourceToken)) { stm.ServiceResource = resourceToken.ToObject <ServiceResource>(); } } if (m_TerritoryMembers == null) { m_TerritoryMembers = new List <ServiceTerritoryMember>(); } m_TerritoryMembers.AddRange(deserializedQuery.records); i_ABData.TerritoryMembers = m_TerritoryMembers; i_ABData.STMResourcesIDs = m_ABData.STMResourcesIDs; }
//TODO: add try catch around every implementation of this method public abstract void Deserialize(string i_QueryResult, AppointmentBookingData i_ABData, AdditionalObjectsUtils.eAdditionalObjectQuery i_AdditionalObjQuery = default, bool async = false);
public override string getQuery(AppointmentBookingRequest i_Request = null, AdditionalObjectsUtils.eAdditionalObjectQuery i_AdditionalObjQuery = default) { m_Request = i_Request; if (doAdditionalMembersQuery) { return(getAdditionalMembersQuery()); } string queryStr = "SELECT ServiceResource.Id, ServiceResource.ResourceType, ServiceResource.ServiceCrewId, ServiceResource.Travel_Speed__c" + ",ServiceResource.IsCapacityBased,ServiceResource.IsActive,ServiceResource.Name," + "ServiceTerritory.Address,ServiceTerritory.Internal_SLR_Geolocation__c,ServiceTerritory.Longitude" + ",ServiceTerritory.Latitude,Id,ServiceResourceId,ServiceTerritory.OperatingHours.TimeZone" + ",ServiceTerritory.Internal_SLR_Geolocation__Latitude__s,ServiceTerritory.Internal_SLR_Geolocation__Longitude__s" + ",OperatingHoursId,OperatingHours.TimeZone,EffectiveEndDate,EffectiveStartDate,Latitude,Longitude," + "Internal_SLR_HomeAddress_Geolocation__Latitude__s,Internal_SLR_HomeAddress_Geolocation__Longitude__s" + ",Internal_SLR_HomeAddress_Geolocation__c,TerritoryType,ServiceTerritoryId,Address"; m_AdditionalMembersQuery = "Select ServiceResource.Id, ServiceResource.IsActive,ServiceResource.Name,ServiceTerritory.Internal_SLR_Geolocation__c," + "ServiceTerritory.Longitude,ServiceTerritory.Latitude,Id,ServiceResourceId," + "ServiceTerritory.OperatingHours.TimeZone,ServiceTerritory.Internal_SLR_Geolocation__Latitude__s," + "ServiceTerritory.Internal_SLR_Geolocation__Longitude__s,OperatingHoursId,OperatingHours.TimeZone," + "EffectiveEndDate,EffectiveStartDate,Latitude,Longitude,Internal_SLR_HomeAddress_Geolocation__Latitude__s," + "Internal_SLR_HomeAddress_Geolocation__Longitude__s,Internal_SLR_HomeAddress_Geolocation__c," + "TerritoryType,ServiceTerritoryId "; HashSet <String> relevanceFields = new HashSet <String>(); ServiceAppointment service = m_ABData.ServiceToSchedule; string notPartOfRelevenceGroupStr = "("; bool atLeastOneLocationRuleIsActive = false; bool travelRuleIsActive = false; double?travelDistance = null; double?latestUpdatedTravelDistance; bool addedOneOfTheRulesToTheQuery = false; bool serviceHasGeo = service.Latitude != null && service.Longitude != null; List <Work_Rule__c> enhancedRules = new List <Work_Rule__c>(); List <Work_Rule__c> rulesListFileteredBySARelevance = new List <Work_Rule__c>(); string territoryId = m_ABData.ServiceToSchedule.ServiceTerritory.Id; rulesListFileteredBySARelevance = initiateRulesWithRelvanceGroupList(m_ABData.RulesByDevName, service); foreach (Work_Rule__c rule in rulesListFileteredBySARelevance) { string resGroupFieldValue = rule.Resource_Group_Field__c; if (rule.DeveloperName.Equals("Match_Location_Service") || rule.DeveloperName.Equals("Field_Working_Locations")) { atLeastOneLocationRuleIsActive = true; } if (serviceHasGeo && rule.DeveloperName.Equals("Max_Travel_From_Home_To_Service") && rule.Maximum_Travel_From_Home_Type__c.Equals("Distance") && rule.Maximum_Travel_From_Home__c != null) { travelRuleIsActive = true; latestUpdatedTravelDistance = (i_Request.TravelUnit == eTravelUnit.Miles.ToString()) ? (rule.Maximum_Travel_From_Home__c * MILE_TO_KM_RATIO) : rule.Maximum_Travel_From_Home__c; if (travelDistance == null || travelDistance < latestUpdatedTravelDistance) { travelDistance = latestUpdatedTravelDistance; travelDistance++; } } if (!string.IsNullOrEmpty(resGroupFieldValue)) { relevanceFields.Add(resGroupFieldValue.ToLower()); if (rule.DeveloperName.Equals("Match_Location_Service") || rule.DeveloperName.Equals("Field_Working_Locations") || (rule.DeveloperName.Equals("Max_Travel_From_Home_To_Service") && rule.Maximum_Travel_From_Home_Type__c.Equals("Distance"))) { if (notPartOfRelevenceGroupStr != "(") { notPartOfRelevenceGroupStr += " AND "; } notPartOfRelevenceGroupStr += resGroupFieldValue.ToLower() + " = false"; } } if (rule.DeveloperName.Equals("Enhanced_Match_Service")) { enhancedRules.Add(rule); } } if (notPartOfRelevenceGroupStr != "(") { notPartOfRelevenceGroupStr += $" AND TerritoryType != \'S\' AND ServiceTerritoryId = {territoryId} )"; } else { notPartOfRelevenceGroupStr += ")"; } foreach (KeyValuePair <string, List <Service_Goal__c> > objByDevName in m_ABData.ObjectivesByDevName) { foreach (Service_Goal__c obj in objByDevName.Value) { String objGroupFieldValue = obj.Resource_Group_Field__c; if (!string.IsNullOrEmpty(objGroupFieldValue)) { relevanceFields.Add(objGroupFieldValue.ToLower()); } } } if (relevanceFields.Any()) { foreach (String field in relevanceFields) { queryStr += "," + field; m_AdditionalMembersQuery += "," + field; } } calculateHorizonByMaxDaysSearchSlot(service, m_DateTimeNow, i_Request.SearchSlotsMaxDays, out m_Start, out m_Finish); notPartOfRelevenceGroupStr = notPartOfRelevenceGroupStr != "()" ? " OR " + notPartOfRelevenceGroupStr : string.Empty; queryStr += " FROM ServiceTerritoryMember WHERE "; if (atLeastOneLocationRuleIsActive && territoryId != null) { addedOneOfTheRulesToTheQuery = true; if (travelRuleIsActive) { queryStr += $"(( ServiceTerritoryId = '{territoryId}' And "; } else { queryStr += $"( ServiceTerritoryId = '{territoryId}' "; } } if (travelRuleIsActive) { if (!addedOneOfTheRulesToTheQuery) { queryStr += "("; } queryStr += $" (TerritoryType = \'S\' Or ( Latitude <> null And Latitude <> 0 And Longitude <> null And Longitude <> 0 And (DISTANCE(Address, GEOLOCATION(' + {service.Latitude} + ',' + {service.Longitude} + '),\'km\') < ' + travelDistance + ') ) OR "; queryStr += $" ( ServiceTerritory.Latitude <> null And ServiceTerritory.Latitude <> 0 And ServiceTerritory.Longitude <> null And ServiceTerritory.Longitude <> 0 And (DISTANCE(ServiceTerritory.Address, GEOLOCATION(' + {service.Latitude} + ',' + {service.Longitude} + '),\'km\') < ' + travelDistance + ') ))"; if (addedOneOfTheRulesToTheQuery) { queryStr += ')'; } addedOneOfTheRulesToTheQuery = true; } if (addedOneOfTheRulesToTheQuery) { queryStr += notPartOfRelevenceGroupStr + ") AND "; } queryStr += $"( NOT ((EffectiveStartDate <> NULL AND EffectiveStartDate > {formatDate(m_Finish)}) OR " + $"(EffectiveEndDate <> NULL AND EffectiveEndDate < {formatDate(m_Start)})) ) And ServiceResource.IsActive = true"; //TODO: implement for Enhanced Match Rule /* * if(enhancedRules != null && enhancedRules.Count > 0) * { * List<string> queriesToFilterResources = getQueriesToFilterResourcesAcoordingToEnhancedRules(service, enhancedRules); * foreach(string queryToFilterResource in queriesToFilterResources){ * queryStr += queryToFilterResource; * } * } */ doAdditionalMembersQuery = true; queryStr = formatQueryString(queryStr); return(queryStr); }
public abstract string getQuery(AppointmentBookingRequest i_Request = null, AdditionalObjectsUtils.eAdditionalObjectQuery i_AdditionalObjQuery = default);
private void deselializeQueryResult(sObjectUtils i_ObjectUtils, string i_QueryResultStr, AdditionalObjectsUtils.eAdditionalObjectQuery i_ObjectToDeserialize = default, bool async = false) { i_ObjectUtils.Deserialize(i_QueryResultStr, m_ABData, i_ObjectToDeserialize, async); }
public override void Deserialize(string i_QueryResult, AppointmentBookingData i_ABData, AdditionalObjectsUtils.eAdditionalObjectQuery i_AdditionalObjQuery = default, bool async = false) { DeserializedQueryResult deserializedQuery = JsonConvert.DeserializeObject <DeserializedQueryResult>(i_QueryResult); bool serviceHasSkills = false; Dictionary <string, double?> skillIdToLevel = new Dictionary <string, double?>(); foreach (SkillRequirement skillReq in i_ABData.ServiceParent[i_ABData.ServiceToSchedule.ParentRecordId].SkillRequirements) { skillIdToLevel.Add(skillReq.SkillId, skillReq.SkillLevel); serviceHasSkills = true; } bool matchSkillLevel = false; if (i_ABData.RulesByDevName.ContainsKey("Match_Skills_Service")) { List <Work_Rule__c> matchSkillsRules = i_ABData.RulesByDevName["Match_Skills_Service"]; foreach (Work_Rule__c rule in matchSkillsRules) { if (rule.Match_Skill_Level__c == true) { matchSkillLevel = true; } } } i_ABData.CandidatesById = new Dictionary <string, ServiceResource>(); if (!matchSkillLevel || !serviceHasSkills) { i_ABData.CandidatesById = deserializedQuery.records.ToDictionary(candidate => candidate.Id); } else { foreach (ServiceResource resource in deserializedQuery.records) { if (resource.serviceResourceSkillsCollection == null) { continue; } foreach (ServiceResourceSkill skill in resource.serviceResourceSkillsCollection.records) { if (skillIdToLevel.ContainsKey(skill.SkillId)) { if (matchSkillLevel && skill.SkillLevel < skillIdToLevel[skill.SkillId]) { continue; } if (!i_ABData.CandidatesById.ContainsKey(resource.Id)) { i_ABData.CandidatesById.Add(resource.Id, resource); } } } } } }