/// <summary> /// Gets the tax group for India inter-state transaction. /// </summary> /// <param name="context">The request context.</param> /// <param name="inventLocationId">Inventory location id.</param> /// <param name="shippingAddress">Shipping address.</param> /// <param name="isInterState">The flag indicates whether it's inter state.</param> /// <returns> /// The sales tax group information. /// </returns> internal static string GetInterStateTaxRegimeIndia(RequestContext context, string inventLocationId, Address shippingAddress, out bool isInterState) { if (context == null) { throw new ArgumentNullException("context"); } if (context.Runtime == null) { throw new ArgumentException("context.Runtime cannot be null."); } if (shippingAddress == null) { throw new ArgumentNullException("shippingAddress"); } if (string.IsNullOrWhiteSpace(shippingAddress.ThreeLetterISORegionName) && string.IsNullOrWhiteSpace(shippingAddress.TwoLetterISORegionName)) { throw new ArgumentNullException("shippingAddress", "shippingAddress ISORegionName"); } string taxRegime = string.Empty; isInterState = false; bool isApplyInterStateTax = false; if (!string.IsNullOrWhiteSpace(inventLocationId)) { GetApplyInterstateTaxIndiaDataRequest getApplyInterstateTaxIndiaDataRequest = new GetApplyInterstateTaxIndiaDataRequest(QueryResultSettings.SingleRecord); ApplyInterStateTaxIndia interStateTaxSetting = context.Runtime.Execute <SingleEntityDataServiceResponse <ApplyInterStateTaxIndia> >(getApplyInterstateTaxIndiaDataRequest, context).Entity; if (interStateTaxSetting != null) { isApplyInterStateTax = interStateTaxSetting.IsApplyInterStateTaxIndia; } if (isApplyInterStateTax) { GetWarehouseAddressIndiaDataRequest getWarehouseAddressIndiaDataRequest = new GetWarehouseAddressIndiaDataRequest(inventLocationId, QueryResultSettings.SingleRecord); Address shippingFromAddress = context.Runtime.Execute <SingleEntityDataServiceResponse <Address> >(getWarehouseAddressIndiaDataRequest, context).Entity; if (shippingFromAddress != null && (shippingFromAddress.ThreeLetterISORegionName == shippingAddress.ThreeLetterISORegionName) && !string.IsNullOrWhiteSpace(shippingFromAddress.State) && !string.IsNullOrWhiteSpace(shippingAddress.State) && (shippingFromAddress.State != shippingAddress.State)) { isInterState = true; } if (isInterState) { GetTaxRegimeIndiaDataRequest getTaxRegimeIndiaDataRequest = new GetTaxRegimeIndiaDataRequest(QueryResultSettings.SingleRecord); taxRegime = context.Runtime.Execute <SingleEntityDataServiceResponse <string> >(getTaxRegimeIndiaDataRequest, context).Entity; if (string.IsNullOrWhiteSpace(taxRegime)) { InvalidTaxGroupNotification notification = new InvalidTaxGroupNotification(shippingFromAddress); context.Notify(notification); } } } } return(taxRegime); }
/// <summary> /// Gets a default logistics postal address for India. /// </summary> /// <param name="request">The get warehouse address India data request.</param> /// <returns>Matching address.</returns> /// <remarks> /// Search address as warehouse -> site -> legal entity. /// </remarks> private SingleEntityDataServiceResponse <Address> GetWarehouseAddressIndia(GetWarehouseAddressIndiaDataRequest request) { ThrowIf.Null(request, "request"); ThrowIf.NullOrWhiteSpace(request.WarehouseId, "request.WarehouseId"); IndiaTaxL2CacheDataStoreAccessor level2CacheDataAccessor = this.GetIndiaTaxL2CacheDataStoreAccessor(request.RequestContext); bool found; bool updateL2Cache; Address result = DataManager.GetDataFromCache(() => level2CacheDataAccessor.GetWarehouseAddressIndia(request.WarehouseId), out found, out updateL2Cache); if (!found) { ParameterSet parameters = new ParameterSet(); parameters["@nv_InventLocationId"] = request.WarehouseId; parameters["@nv_InventLocationDataAreaId"] = request.RequestContext.GetChannelConfiguration().InventLocationDataAreaId; using (SqlServerDatabaseContext sqlServerDatabaseContext = new SqlServerDatabaseContext(request)) { result = sqlServerDatabaseContext.ExecuteStoredProcedure <Address>(GetWarehouseAddressIndiaName, parameters).SingleOrDefault(); } updateL2Cache &= result != null; } if (updateL2Cache) { level2CacheDataAccessor.PutWarehouseAddressIndia(request.WarehouseId, result); } return(new SingleEntityDataServiceResponse <Address>(result)); }