/// <summary>
 /// Maps a data reader to a product specification attribute
 /// </summary>
 /// <param name="dataReader">IDataReader</param>
 /// <returns>Product specification attribute</returns>
 private DBProductSpecificationAttribute GetProductSpecificationAttributeFromReader(IDataReader dataReader)
 {
     DBProductSpecificationAttribute productSpecificationAttribute = new DBProductSpecificationAttribute();
     productSpecificationAttribute.ProductSpecificationAttributeID = NopSqlDataHelper.GetInt(dataReader, "ProductSpecificationAttributeID");
     productSpecificationAttribute.ProductID = NopSqlDataHelper.GetInt(dataReader, "ProductID");
     productSpecificationAttribute.SpecificationAttributeOptionID = NopSqlDataHelper.GetInt(dataReader, "SpecificationAttributeOptionID");
     productSpecificationAttribute.AllowFiltering = NopSqlDataHelper.GetBoolean(dataReader, "AllowFiltering");
     productSpecificationAttribute.ShowOnProductPage = NopSqlDataHelper.GetBoolean(dataReader, "ShowOnProductPage");
     productSpecificationAttribute.DisplayOrder = NopSqlDataHelper.GetInt(dataReader, "DisplayOrder");
     return productSpecificationAttribute;
 }
        /// <summary>
        /// Gets a product specification attribute mapping
        /// </summary>
        /// <param name="ProductSpecificationAttributeID">Product specification attribute mapping identifier</param>
        /// <returns>Product specification attribute mapping</returns>
        public static ProductSpecificationAttribute GetProductSpecificationAttributeByID(int ProductSpecificationAttributeID)
        {
            if (ProductSpecificationAttributeID == 0)
            {
                return(null);
            }

            DBProductSpecificationAttribute dbItem = DBProviderManager <DBSpecificationAttributeProvider> .Provider.GetProductSpecificationAttributeByID(ProductSpecificationAttributeID);

            ProductSpecificationAttribute productSpecificationAttribute = DBMapping(dbItem);

            return(productSpecificationAttribute);
        }
        /// <summary>
        /// Updates the product specification attribute mapping
        /// </summary>
        /// <param name="productSpecificationAttributeID">product specification attribute mapping identifier</param>
        /// <param name="productID">Product identifier</param>
        /// <param name="specificationAttributeOptionID">Specification attribute identifier</param>
        /// <param name="allowFiltering">Allow product filtering by this attribute</param>
        /// <param name="showOnProductPage">Show the attribute on the product page</param>
        /// <param name="displayOrder">The display order</param>
        /// <returns>Product specification attribute mapping</returns>
        public static ProductSpecificationAttribute UpdateProductSpecificationAttribute(int productSpecificationAttributeID,
                                                                                        int productID, int specificationAttributeOptionID, bool allowFiltering, bool showOnProductPage, int displayOrder)
        {
            DBProductSpecificationAttribute dbItem = DBProviderManager <DBSpecificationAttributeProvider> .Provider.UpdateProductSpecificationAttribute(productSpecificationAttributeID,
                                                                                                                                                        productID, specificationAttributeOptionID, allowFiltering, showOnProductPage, displayOrder);

            ProductSpecificationAttribute productSpecificationAttribute = DBMapping(dbItem);

            if (SpecificationAttributeManager.CacheEnabled)
            {
                NopCache.RemoveByPattern(SPECIFICATIONATTRIBUTEOPTION_PATTERN_KEY);
                NopCache.RemoveByPattern(SPECIFICATIONATTRIBUTEOPTION_PATTERN_KEY);
                NopCache.RemoveByPattern(PRODUCTSPECIFICATIONATTRIBUTE_PATTERN_KEY);
            }
            return(productSpecificationAttribute);
        }
        /// <summary>
        /// Maps a DBProductSpecificationAttribute to a ProductSpecificationAttribute
        /// </summary>
        /// <param name="dbItem">DBProductSpecificationAttribute</param>
        /// <returns>ProductSpecificationAttribute</returns>
        private static ProductSpecificationAttribute DBMapping(DBProductSpecificationAttribute dbItem)
        {
            if (dbItem == null)
            {
                return(null);
            }

            ProductSpecificationAttribute item = new ProductSpecificationAttribute();

            item.ProductSpecificationAttributeID = dbItem.ProductSpecificationAttributeID;
            item.ProductID = dbItem.ProductID;
            item.SpecificationAttributeOptionID = dbItem.SpecificationAttributeOptionID;
            item.AllowFiltering    = dbItem.AllowFiltering;
            item.ShowOnProductPage = dbItem.ShowOnProductPage;
            item.DisplayOrder      = dbItem.DisplayOrder;

            return(item);
        }