private static EntityDataServiceResponse <ProductVariant> GetVariantsByDimensionIds(GetVariantsByDimensionIdsDataRequest request) { IEnumerable <string> inventoryDimensionIds = request.InventoryDimensionIds; RequestContext context = request.RequestContext; ThrowIf.Null(inventoryDimensionIds, "inventoryDimensionIds"); ThrowIf.Null(context, "context"); ItemL2CacheDataStoreAccessor level2CacheDataAccessor = GetCacheAccessor(context); bool found; bool updateL2Cache; ReadOnlyCollection <ProductVariant> result = DataManager.GetDataFromCache(() => level2CacheDataAccessor.GetVariantsByDimensionIds(inventoryDimensionIds), out found, out updateL2Cache); if (!found) { if (inventoryDimensionIds.Any()) { var settings = new QueryResultSettings(PagingInfo.CreateWithExactCount(inventoryDimensionIds.Count(), 0)); var query = new SqlPagedQuery(settings) { Select = new ColumnSet(), From = InventDimViewName, Where = string.Format("{0} = {1}", DataAreaIdColumnName, DataAreaIdVariableName) }; query.Parameters[DataAreaIdVariableName] = context.GetChannelConfiguration().InventLocationDataAreaId; using (StringIdTableType type = new StringIdTableType(inventoryDimensionIds, InventDimIdColumnName)) { query.Parameters[ItemIdTableTypeVariableName] = type; using (DatabaseContext databaseContext = new DatabaseContext(context)) { result = databaseContext.ReadEntity <ProductVariant>(query).Results; } } } else { result = new ReadOnlyCollection <ProductVariant>(new ProductVariant[0]); } updateL2Cache &= result != null && result.Count < MaxCachedCollectionSize; } if (updateL2Cache) { level2CacheDataAccessor.PutVariantDimensionsByItemIds(inventoryDimensionIds, result); } return(new EntityDataServiceResponse <ProductVariant>(result.AsPagedResult())); }
private static EntityDataServiceResponse <ProductVariant> GetProductVariants(GetProductVariantsDataRequest request) { IEnumerable <ItemVariantInventoryDimension> itemVariants = request.ItemAndInventoryDimensionIds; RequestContext context = request.RequestContext; ThrowIf.Null(itemVariants, "itemVariants"); ThrowIf.Null(context, "context"); ColumnSet columnSet = new ColumnSet(); ItemL2CacheDataStoreAccessor level2CacheDataAccessor = GetCacheAccessor(context); bool found; bool updateL2Cache; ReadOnlyCollection <ProductVariant> result = DataManager.GetDataFromCache(() => level2CacheDataAccessor.GetVariants(itemVariants, columnSet), out found, out updateL2Cache); if (!found) { var query = new SqlPagedQuery(QueryResultSettings.AllRecords) { Select = columnSet, From = GetVariantsByItemIdAndInventDimIdFunctionName }; using (var type = new ItemVariantInventoryDimensionTableType(itemVariants)) { query.Parameters[DatabaseAccessor.ChannelIdVariableName] = context.GetPrincipal().ChannelId; query.Parameters[DatabaseAccessor.ChannelDateVariableName] = context.GetNowInChannelTimeZone().Date; query.Parameters[ItemVariantIdsVariableName] = type.DataTable; using (SqlServerDatabaseContext databaseContext = new SqlServerDatabaseContext(context)) { result = databaseContext.ReadEntity <ProductVariant>(query).Results; } } updateL2Cache &= result != null; } if (updateL2Cache) { level2CacheDataAccessor.PutVariants(itemVariants, columnSet, result); } return(new EntityDataServiceResponse <ProductVariant>(result.AsPagedResult())); }
private static EntityDataServiceResponse <RetailCategoryMember> GetRetailCategoryMembersForItems(GetRetailCategoryMembersForItemsDataRequest request) { RequestContext context = request.RequestContext; ISet <long> productOrVariantIds = request.ProductOrVariantIds; ThrowIf.Null(productOrVariantIds, "productOrVariantIds"); ThrowIf.Null(context, "context"); ItemL2CacheDataStoreAccessor level2CacheDataAccessor = GetCacheAccessor(context); bool found; bool updateL2Cache; ReadOnlyCollection <RetailCategoryMember> result = DataManager.GetDataFromCache(() => level2CacheDataAccessor.GetRetailCategoryMembersForItems(productOrVariantIds), out found, out updateL2Cache); if (!found) { SqlPagedQuery query = new SqlPagedQuery(QueryResultSettings.AllRecords) { Select = new ColumnSet(), From = RetailCategoryMembersForItemsViewName }; using (RecordIdTableType type = new RecordIdTableType(productOrVariantIds, CommerceEntityExtensions.GetColumnName <RetailCategoryMember>(e => e.ProductOrVariantId))) { query.Parameters[RecordIdTableTypeVariableName] = type; using (DatabaseContext databaseContext = new DatabaseContext(context)) { result = databaseContext.ReadEntity <RetailCategoryMember>(query).Results; } } updateL2Cache &= result != null; } if (updateL2Cache) { level2CacheDataAccessor.PutRetailCategoryMembersForItems(productOrVariantIds, result); } return(new EntityDataServiceResponse <RetailCategoryMember>(result.AsPagedResult())); }
private static SingleEntityDataServiceResponse <ItemMaxRetailPriceIndia> GetItemMaxRetailPrice(GetItemMaxRetailPriceDataRequest request) { string itemId = request.ItemId; RequestContext context = request.RequestContext; ThrowIf.Null(itemId, "itemId"); ThrowIf.Null(context, "context"); ColumnSet columnSet = request.QueryResultSettings != null ? request.QueryResultSettings.ColumnSet : new ColumnSet(); ItemL2CacheDataStoreAccessor level2CacheDataAccessor = GetCacheAccessor(context); bool found; bool updateL2Cache; ItemMaxRetailPriceIndia result = DataManager.GetDataFromCache(() => level2CacheDataAccessor.GetItemMaxRetailPrice(itemId, columnSet), out found, out updateL2Cache); if (!found) { var query = new SqlPagedQuery(QueryResultSettings.SingleRecord) { Select = columnSet, From = ItemsMaxRetailPricesIndiaViewName, Where = string.Format("{0} = {1} AND {2} = {3}", ItemIdColumnName, ItemIdVariableName, DataAreaIdColumnName, DataAreaIdVariableName), }; query.Parameters[ItemIdVariableName] = itemId; query.Parameters[DataAreaIdVariableName] = context.GetChannelConfiguration().InventLocationDataAreaId; using (DatabaseContext databaseContext = new DatabaseContext(context)) { result = databaseContext.ReadEntity <ItemMaxRetailPriceIndia>(query).SingleOrDefault(); } updateL2Cache &= result != null; } if (updateL2Cache) { level2CacheDataAccessor.PutItemMaxRetailPrice(itemId, columnSet, result); } return(new SingleEntityDataServiceResponse <ItemMaxRetailPriceIndia>(result)); }
/// <summary> /// Gets the items using the specified item identifiers. /// </summary> /// <param name="context">The request context.</param> /// <param name="itemIds">The list of item identifiers.</param> /// <param name="settings">The query result settings.</param> /// <returns>The collection of items.</returns> private static ReadOnlyCollection <Item> GetItems(RequestContext context, IEnumerable <string> itemIds, QueryResultSettings settings) { ThrowIf.Null(context, "context"); ThrowIf.Null(itemIds, "itemIds"); ThrowIf.Null(settings, "settings"); ItemL2CacheDataStoreAccessor level2CacheDataAccessor = GetCacheAccessor(context); bool found; bool updateL2Cache; ReadOnlyCollection <Item> result = DataManager.GetDataFromCache(() => level2CacheDataAccessor.GetItems(itemIds, settings), out found, out updateL2Cache); if (!found) { using (StringIdTableType type = new StringIdTableType(itemIds, "ITEMID")) { var parameters = new ParameterSet(); parameters[DatabaseAccessor.ChannelIdVariableName] = context.GetPrincipal().ChannelId; parameters[DatabaseAccessor.ChannelDateVariableName] = context.GetNowInChannelTimeZone().DateTime; parameters[ItemIdsVariableName] = type.DataTable; using (SqlServerDatabaseContext databaseContext = new SqlServerDatabaseContext(context, settings)) { result = databaseContext.ExecuteStoredProcedure <Item>(GetItemsByItemIdsSprocName, parameters).Results; } } updateL2Cache &= result != null && result.Count < MaxCachedCollectionSize; } if (updateL2Cache) { level2CacheDataAccessor.PutItems(itemIds, settings, result); } return(result); }
private static GetProductBarcodeDataResponse GetProductBarcodeData(GetProductBarcodeDataRequest request) { string barcode = request.Barcode; RequestContext context = request.RequestContext; ThrowIf.Null(barcode, "barcode"); ThrowIf.Null(context, "context"); ColumnSet columns = request.QueryResultSettings != null ? request.QueryResultSettings.ColumnSet : new ColumnSet(); ItemL2CacheDataStoreAccessor level2CacheDataAccessor = GetCacheAccessor(request.RequestContext); bool found; bool updateL2Cache; ItemBarcode result = DataManager.GetDataFromCache(() => level2CacheDataAccessor.GetItemsByBarcode(barcode, columns), out found, out updateL2Cache); if (!found) { var query = new SqlPagedQuery(QueryResultSettings.AllRecords) { Select = columns, From = BarcodesViewName, Where = string.Format("{0} LIKE {1} AND {2} = {3}", ItemBarcodeColumnName, ItemBarcodeVariableName, DataAreaIdColumnName, DataAreaIdVariableName), }; query.Parameters[ItemBarcodeVariableName] = barcode; query.Parameters[DataAreaIdVariableName] = context.GetChannelConfiguration().InventLocationDataAreaId; IEnumerable <ItemBarcode> itemBarcodes; using (DatabaseContext databaseContext = new DatabaseContext(context)) { itemBarcodes = databaseContext.ReadEntity <ItemBarcode>(query).Results; } // If the barcode matches with more than one variant, then we should set the variant details to null/ empty. // When this scenario occurs, the client should pop up new dialog to get the variant details. if (itemBarcodes.Count() > 1) { ItemBarcode itemBarcode = itemBarcodes.FirstOrDefault(); if (itemBarcode != null) { itemBarcode.SetVariantDetailsToEmpty(); result = itemBarcode; } } else { using (DatabaseContext databaseContext = new DatabaseContext(context)) { result = databaseContext.ReadEntity <ItemBarcode>(query).SingleOrDefault(); } } updateL2Cache &= result != null; } if (updateL2Cache) { level2CacheDataAccessor.PutItemsByBarcode(barcode, columns, result); } return(new GetProductBarcodeDataResponse(result)); }