/// <summary>
            /// Gets the tax code intervals.
            /// </summary>
            /// <param name="context">The request context.</param>
            /// <param name="salesTaxGroupId">The sales tax group Id.</param>
            /// <param name="itemTaxGroupId">The item sales tax group Id.</param>
            /// <param name="transDate">The transaction date.</param>
            /// <returns>The tax code interval object.</returns>
            protected override ReadOnlyCollection <TaxCodeInterval> GetTaxCodeIntervals(RequestContext context, string salesTaxGroupId, string itemTaxGroupId, DateTimeOffset transDate)
            {
                GetTaxCodeIntervalsIndiaDataRequest  dataRequest      = new GetTaxCodeIntervalsIndiaDataRequest(salesTaxGroupId, itemTaxGroupId, transDate);
                ReadOnlyCollection <TaxCodeInterval> taxCodeIntervals = context.Execute <EntityDataServiceResponse <TaxCodeInterval> >(dataRequest).PagedEntityCollection.Results;

                return(taxCodeIntervals);
            }
            /// <summary>
            /// The data service method to get tax code intervals for India.
            /// </summary>
            /// <param name="request">The data service request.</param>
            /// <returns>The data service response.</returns>
            private EntityDataServiceResponse <TaxCodeInterval> GetTaxCodeIntervalsIndia(GetTaxCodeIntervalsIndiaDataRequest request)
            {
                ThrowIf.Null(request.ItemTaxGroupId, "itemTaxGroupId");

                IndiaTaxL2CacheDataStoreAccessor level2CacheDataAccessor = this.GetIndiaTaxL2CacheDataStoreAccessor(request.RequestContext);

                bool found;
                bool updateL2Cache;
                ReadOnlyCollection <TaxCodeInterval> result = DataManager.GetDataFromCache(() => level2CacheDataAccessor.GetTaxCodeIntervalsIndia(request.SalesTaxGroupId, request.ItemTaxGroupId, request.TransactionDate), out found, out updateL2Cache);

                if (!found)
                {
                    ParameterSet parameters = new ParameterSet();
                    parameters[DatabaseAccessor.ChannelIdVariableName] = request.RequestContext.GetPrincipal().ChannelId;
                    parameters["@nvc_SalesTaxGroup"]  = request.SalesTaxGroupId ?? string.Empty;
                    parameters["@nvc_ItemTaxGroup"]   = request.ItemTaxGroupId ?? string.Empty;
                    parameters["@dt_TransactionDate"] = request.TransactionDate.DateTime;

                    ReadOnlyCollection <TaxCodeIntervalIndia> taxCodeIntervalsIndia;
                    using (SqlServerDatabaseContext databaseContext = new SqlServerDatabaseContext(request))
                    {
                        taxCodeIntervalsIndia = databaseContext.ExecuteStoredProcedure <TaxCodeIntervalIndia>(GetTaxCodeIntervalsIndiaSprocName, parameters).Results;
                    }

                    result = taxCodeIntervalsIndia.Cast <TaxCodeInterval>().AsReadOnly();

                    updateL2Cache &= result != null &&
                                     result.Count < MaxCachedCollectionSize;
                }

                if (updateL2Cache)
                {
                    level2CacheDataAccessor.PutTaxCodeIntervalsIndia(request.SalesTaxGroupId, request.ItemTaxGroupId, request.TransactionDate, result);
                }

                return(new EntityDataServiceResponse <TaxCodeInterval>(result.AsPagedResult()));
            }