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;
            }
        }
        public override string getQuery(AppointmentBookingRequest i_Request         = null,
                                        eAdditionalObjectQuery i_AdditionalObjQuery = default)
        {
            ServiceAppointment service = m_ABData.ServiceToSchedule;

            m_Start  = service.EarliestStartTime.Value;
            m_Finish = service.DueDate.Value;
            calculateHorizonByMaxDaysSearchSlot(service, DateTime.Now, i_Request.SearchSlotsMaxDays, out m_Start,
                                                out m_Finish);

            string query;

            switch (i_AdditionalObjQuery)
            {
            case eAdditionalObjectQuery.ServicesInResourcesTimeDomain:
                query = getServicesInResourcesTimeDomainQuery();
                break;

            case eAdditionalObjectQuery.ResourcesAdditionalObjects:
                query = getResourcesQueryForAdditionalObjects(i_Request);
                break;

            case eAdditionalObjectQuery.ResourceTerritories:
                query = getResourceTerritoriesQuery(i_Request);
                break;

            case eAdditionalObjectQuery.Capacities:
                query = getCapacitiesQuery(i_Request);
                break;

            case eAdditionalObjectQuery.Calendars:
                query = getCalendarsQuery(i_Request);
                break;

            default:
                query = String.Empty;
                break;
            }

            return(formatQueryString(query));
        }