コード例 #1
0
        public override void Deserialize(string i_QueryResult, AppointmentBookingData i_ABData,
                                         eAdditionalObjectQuery i_AdditionalObjQuery = default, bool async = false)
        {
            DeserializedQueryResult deserializedQuery =
                JsonConvert.DeserializeObject <DeserializedQueryResult>(i_QueryResult);

            switch (i_AdditionalObjQuery)
            {
            case eAdditionalObjectQuery.ServicesInResourcesTimeDomain:
                deserializeServicesInResourcesTimeDomain(i_ABData, deserializedQuery, async);
                break;

            case eAdditionalObjectQuery.ResourcesAdditionalObjects:
                i_ABData.ABAdditionalObjects.ResBreaksAndShiftsByResId =
                    deserializedQuery.records.ToDictionary(record => record.Id);
                break;

            case eAdditionalObjectQuery.ResourceTerritories:
                deserializedResourceTerritories(i_ABData, deserializedQuery.records);
                break;

            case eAdditionalObjectQuery.Capacities:
                i_ABData.ABAdditionalObjects.Capacities =
                    deserializedQuery.records;
                break;

            case eAdditionalObjectQuery.Calendars:
                i_ABData.ABAdditionalObjects.Calendars =
                    deserializedQuery.records;
                break;

            default:
                break;
            }
        }
コード例 #2
0
        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;
        }
コード例 #3
0
        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);
        }
コード例 #4
0
        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;
        }
コード例 #5
0
        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);
                    }
                }
            }
        }
コード例 #6
0
        public static string GetDataByApexRestService(string i_RequestBody)
        {
            string header = "\n~~~~~~~~ APEX REST Service ~~~~~~~~";

            SFDCScheduleRequest request;

            request = ParseRequestString(i_RequestBody);
            connectToSF(request);

            long elapsedTime = 0;
            Dictionary <string, decimal> ongoingMeasurments = new Dictionary <string, decimal>();
            long totalExtraction = 0;

            m_FSLClient.setClientURIforApexRest();
            RestRequest restRequest = m_FSLClient.getApexRequest();

            for (int i = 0; i < 100; i++)
            {
                Stopwatch watchExtractDataApexRest = new Stopwatch();
                watchExtractDataApexRest.Start();

                string responseData = m_FSLClient.RequestABData(restRequest);
                DeserializedQueryResult deserializedResponse =
                    JsonConvert.DeserializeObject <DeserializedQueryResult>(responseData);
                elapsedTime += deserializedResponse.m_runtime;
                Dictionary <string, decimal> measurments = deserializedResponse.measures;

                watchExtractDataApexRest.Stop();
                totalExtraction += watchExtractDataApexRest.ElapsedMilliseconds;
                watchExtractDataApexRest.Reset();
                mergeMeasures(ongoingMeasurments, measurments);
            }

            Dictionary <string, decimal> finalMeasurments = getAverageResults(ongoingMeasurments);
            string log = "\n\n" + header + "\nExtraction of data by APEX REST (average of 100 calls):\nExtraction in SFS MP: " + (elapsedTime / 100) + " ms\n" +
                         "Total extraction of data by REST API took: " + (totalExtraction / 100) +
                         " ms\nMeasurements per query:\n" +
                         dictionaryToString(finalMeasurments) + "\n\n";

            LambdaLogger.Log(log);

            return(log);
        }
コード例 #7
0
        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);
            }
        }
コード例 #8
0
        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);
        }
コード例 #9
0
        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];
                    }
                }
            }
        }
コード例 #10
0
        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;
        }
コード例 #11
0
        private void deserializeServicesInResourcesTimeDomain(AppointmentBookingData i_ABData, DeserializedQueryResult i_DeserializedQuery, bool async)
        {
            if (!async)
            {
                m_ResourceServices.AddRange(i_DeserializedQuery.records);
            }

            if (i_DeserializedQuery.nextRecordsUrl != null)
            {
                i_ABData.ABAdditionalObjects.nextRecordsUrl = i_DeserializedQuery.nextRecordsUrl;
            }
            else
            {
                if (!async)
                {
                    i_ABData.ABAdditionalObjects.ServicesById =
                        m_ResourceServices.ToDictionary(record => record.Id);
                }
            }
        }
コード例 #12
0
        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);
                            }
                        }
                    }
                }
            }
        }