Source: models/Product.js

/* * *  *  * *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  * */
/* Copyright (c) 2020 Mobify Research & Development Inc. All rights reserved. */
/* * *  *  * *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  * */

/**
 * Shop API
 * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
 *
 * OpenAPI spec version: 20.4
 *
 *
 * NOTE: This class is auto generated by the swagger code generator program.
 * https://github.com/swagger-api/swagger-codegen.git
 * Do not edit the class manually.
 *
 */


import ApiClient from '../ApiClient'
import BundledProduct from './BundledProduct'
import ImageGroup from './ImageGroup'
import Inventory from './Inventory'
import Master from './Master'
import Option from './Option'
import ProductLink from './ProductLink'
import ProductPromotion from './ProductPromotion'
import ProductType from './ProductType'
import Recommendation from './Recommendation'
import Variant from './Variant'
import VariationAttribute from './VariationAttribute'
import VariationGroup from './VariationGroup'





/**
* The Product model module.
* @module models/Product
* @version 20.4
*/
export default class Product {
    /**
    * Constructs a new <code>Product</code>.
    * Document representing a product.
    * @alias module:models/Product
    * @class
    * @param id {String} The id (SKU) of the product.
    */

    constructor(id) {





        this.id = id


    }

    /**
    * Constructs a <code>Product</code> from a plain JavaScript object, optionally creating a new instance.
    * Copies all relevant properties from <code>data</code> to <code>obj</code> if supplied or a new instance if not.
    * @param {Object} data The plain JavaScript object bearing properties of interest.
    * @param {module:models/Product} obj Optional instance to populate.
    * @return {module:models/Product} The populated <code>Product</code> instance.
    */
    static constructFromObject(data, obj) {
        if (data) {
            obj = obj || new Product()





            if (data.hasOwnProperty('brand')) {
                obj.brand = ApiClient.convertToType(data.brand, 'String')
            }
            if (data.hasOwnProperty('bundled_products')) {
                obj.bundled_products = ApiClient.convertToType(data.bundled_products, [BundledProduct])
            }
            if (data.hasOwnProperty('c_availableForInStorePickup')) {
                obj.c_availableForInStorePickup = ApiClient.convertToType(data.c_availableForInStorePickup, 'Boolean')
            }
            if (data.hasOwnProperty('c_batteryLife')) {
                obj.c_batteryLife = ApiClient.convertToType(data.c_batteryLife, 'String')
            }
            if (data.hasOwnProperty('c_batteryType')) {
                obj.c_batteryType = ApiClient.convertToType(data.c_batteryType, 'String')
            }
            if (data.hasOwnProperty('c_bootType')) {
                obj.c_bootType = ApiClient.convertToType(data.c_bootType, ['String'])
            }
            if (data.hasOwnProperty('c_bottomType')) {
                obj.c_bottomType = ApiClient.convertToType(data.c_bottomType, ['String'])
            }
            if (data.hasOwnProperty('c_color')) {
                obj.c_color = ApiClient.convertToType(data.c_color, 'String')
            }
            if (data.hasOwnProperty('c_consoleWarranty')) {
                obj.c_consoleWarranty = ApiClient.convertToType(data.c_consoleWarranty, 'String')
            }
            if (data.hasOwnProperty('c_customCSSFile')) {
                obj.c_customCSSFile = ApiClient.convertToType(data.c_customCSSFile, 'String')
            }
            if (data.hasOwnProperty('c_digitalCameraFeatures')) {
                obj.c_digitalCameraFeatures = ApiClient.convertToType(data.c_digitalCameraFeatures, ['String'])
            }
            if (data.hasOwnProperty('c_digitalCameraPixels')) {
                obj.c_digitalCameraPixels = ApiClient.convertToType(data.c_digitalCameraPixels, 'String')
            }
            if (data.hasOwnProperty('c_digitalCameraType')) {
                obj.c_digitalCameraType = ApiClient.convertToType(data.c_digitalCameraType, 'String')
            }
            if (data.hasOwnProperty('c_digitalCameraWarranty')) {
                obj.c_digitalCameraWarranty = ApiClient.convertToType(data.c_digitalCameraWarranty, 'String')
            }
            if (data.hasOwnProperty('c_dimDepth')) {
                obj.c_dimDepth = ApiClient.convertToType(data.c_dimDepth, 'String')
            }
            if (data.hasOwnProperty('c_dimHeight')) {
                obj.c_dimHeight = ApiClient.convertToType(data.c_dimHeight, 'String')
            }
            if (data.hasOwnProperty('c_dimWeight')) {
                obj.c_dimWeight = ApiClient.convertToType(data.c_dimWeight, 'String')
            }
            if (data.hasOwnProperty('c_dimWidth')) {
                obj.c_dimWidth = ApiClient.convertToType(data.c_dimWidth, 'String')
            }
            if (data.hasOwnProperty('c_displaySize')) {
                obj.c_displaySize = ApiClient.convertToType(data.c_displaySize, 'String')
            }
            if (data.hasOwnProperty('c_gameGenre')) {
                obj.c_gameGenre = ApiClient.convertToType(data.c_gameGenre, ['String'])
            }
            if (data.hasOwnProperty('c_gameRating')) {
                obj.c_gameRating = ApiClient.convertToType(data.c_gameRating, 'String')
            }
            if (data.hasOwnProperty('c_gameSystemType')) {
                obj.c_gameSystemType = ApiClient.convertToType(data.c_gameSystemType, 'String')
            }
            if (data.hasOwnProperty('c_gpsFeatures')) {
                obj.c_gpsFeatures = ApiClient.convertToType(data.c_gpsFeatures, ['String'])
            }
            if (data.hasOwnProperty('c_gpsType')) {
                obj.c_gpsType = ApiClient.convertToType(data.c_gpsType, ['String'])
            }
            if (data.hasOwnProperty('c_gpsWarranty')) {
                obj.c_gpsWarranty = ApiClient.convertToType(data.c_gpsWarranty, 'String')
            }
            if (data.hasOwnProperty('c_imageAspectRatio')) {
                obj.c_imageAspectRatio = ApiClient.convertToType(data.c_imageAspectRatio, 'String')
            }
            if (data.hasOwnProperty('c_isNew')) {
                obj.c_isNew = ApiClient.convertToType(data.c_isNew, 'Boolean')
            }
            if (data.hasOwnProperty('c_isNewtest')) {
                obj.c_isNewtest = ApiClient.convertToType(data.c_isNewtest, 'Boolean')
            }
            if (data.hasOwnProperty('c_isSale')) {
                obj.c_isSale = ApiClient.convertToType(data.c_isSale, 'Boolean')
            }
            if (data.hasOwnProperty('c_kidsAge')) {
                obj.c_kidsAge = ApiClient.convertToType(data.c_kidsAge, 'String')
            }
            if (data.hasOwnProperty('c_length')) {
                obj.c_length = ApiClient.convertToType(data.c_length, 'String')
            }
            if (data.hasOwnProperty('c_lensAperture')) {
                obj.c_lensAperture = ApiClient.convertToType(data.c_lensAperture, 'String')
            }
            if (data.hasOwnProperty('c_materialTest')) {
                obj.c_materialTest = ApiClient.convertToType(data.c_materialTest, ['String'])
            }
            if (data.hasOwnProperty('c_mediaFormat')) {
                obj.c_mediaFormat = ApiClient.convertToType(data.c_mediaFormat, ['String'])
            }
            if (data.hasOwnProperty('c_memorySize')) {
                obj.c_memorySize = ApiClient.convertToType(data.c_memorySize, 'String')
            }
            if (data.hasOwnProperty('c_memoryType')) {
                obj.c_memoryType = ApiClient.convertToType(data.c_memoryType, ['String'])
            }
            if (data.hasOwnProperty('c_musicStorage')) {
                obj.c_musicStorage = ApiClient.convertToType(data.c_musicStorage, 'String')
            }
            if (data.hasOwnProperty('c_opticalZoom')) {
                obj.c_opticalZoom = ApiClient.convertToType(data.c_opticalZoom, 'String')
            }
            if (data.hasOwnProperty('c_outerwearType')) {
                obj.c_outerwearType = ApiClient.convertToType(data.c_outerwearType, 'String')
            }
            if (data.hasOwnProperty('c_portableAudioType')) {
                obj.c_portableAudioType = ApiClient.convertToType(data.c_portableAudioType, ['String'])
            }
            if (data.hasOwnProperty('c_refinementColor')) {
                obj.c_refinementColor = ApiClient.convertToType(data.c_refinementColor, 'String')
            }
            if (data.hasOwnProperty('c_resolution')) {
                obj.c_resolution = ApiClient.convertToType(data.c_resolution, 'String')
            }
            if (data.hasOwnProperty('c_sandalType')) {
                obj.c_sandalType = ApiClient.convertToType(data.c_sandalType, 'String')
            }
            if (data.hasOwnProperty('c_sheets')) {
                obj.c_sheets = ApiClient.convertToType(data.c_sheets, ['String'])
            }
            if (data.hasOwnProperty('c_shoeType')) {
                obj.c_shoeType = ApiClient.convertToType(data.c_shoeType, 'String')
            }
            if (data.hasOwnProperty('c_size')) {
                obj.c_size = ApiClient.convertToType(data.c_size, 'String')
            }
            if (data.hasOwnProperty('c_skinConcern')) {
                obj.c_skinConcern = ApiClient.convertToType(data.c_skinConcern, ['String'])
            }
            if (data.hasOwnProperty('c_styleNumber')) {
                obj.c_styleNumber = ApiClient.convertToType(data.c_styleNumber, 'String')
            }
            if (data.hasOwnProperty('c_tabDescription')) {
                obj.c_tabDescription = ApiClient.convertToType(data.c_tabDescription, 'String')
            }
            if (data.hasOwnProperty('c_tabDetails')) {
                obj.c_tabDetails = ApiClient.convertToType(data.c_tabDetails, 'String')
            }
            if (data.hasOwnProperty('c_test')) {
                obj.c_test = ApiClient.convertToType(data.c_test, 'String')
            }
            if (data.hasOwnProperty('c_topType')) {
                obj.c_topType = ApiClient.convertToType(data.c_topType, 'String')
            }
            if (data.hasOwnProperty('c_tvSignalFormat')) {
                obj.c_tvSignalFormat = ApiClient.convertToType(data.c_tvSignalFormat, 'String')
            }
            if (data.hasOwnProperty('c_tvSize')) {
                obj.c_tvSize = ApiClient.convertToType(data.c_tvSize, 'String')
            }
            if (data.hasOwnProperty('c_tvType')) {
                obj.c_tvType = ApiClient.convertToType(data.c_tvType, 'String')
            }
            if (data.hasOwnProperty('c_tvWarranty')) {
                obj.c_tvWarranty = ApiClient.convertToType(data.c_tvWarranty, 'String')
            }
            if (data.hasOwnProperty('c_videoStorage')) {
                obj.c_videoStorage = ApiClient.convertToType(data.c_videoStorage, 'String')
            }
            if (data.hasOwnProperty('c_waist')) {
                obj.c_waist = ApiClient.convertToType(data.c_waist, 'String')
            }
            if (data.hasOwnProperty('c_width')) {
                obj.c_width = ApiClient.convertToType(data.c_width, 'String')
            }
            if (data.hasOwnProperty('currency')) {
                obj.currency = ApiClient.convertToType(data.currency, 'String')
            }
            if (data.hasOwnProperty('ean')) {
                obj.ean = ApiClient.convertToType(data.ean, 'String')
            }
            if (data.hasOwnProperty('fetch_date')) {
                obj.fetch_date = ApiClient.convertToType(data.fetch_date, 'Number')
            }
            if (data.hasOwnProperty('id')) {
                obj.id = ApiClient.convertToType(data.id, 'String')
            }
            if (data.hasOwnProperty('image_groups')) {
                obj.image_groups = ApiClient.convertToType(data.image_groups, [ImageGroup])
            }
            if (data.hasOwnProperty('inventories')) {
                obj.inventories = ApiClient.convertToType(data.inventories, [Inventory])
            }
            if (data.hasOwnProperty('inventory')) {
                obj.inventory = Inventory.constructFromObject(data.inventory)
            }
            if (data.hasOwnProperty('long_description')) {
                obj.long_description = ApiClient.convertToType(data.long_description, 'String')
            }
            if (data.hasOwnProperty('manufacturer_name')) {
                obj.manufacturer_name = ApiClient.convertToType(data.manufacturer_name, 'String')
            }
            if (data.hasOwnProperty('manufacturer_sku')) {
                obj.manufacturer_sku = ApiClient.convertToType(data.manufacturer_sku, 'String')
            }
            if (data.hasOwnProperty('master')) {
                obj.master = Master.constructFromObject(data.master)
            }
            if (data.hasOwnProperty('min_order_quantity')) {
                obj.min_order_quantity = ApiClient.convertToType(data.min_order_quantity, 'Number')
            }
            if (data.hasOwnProperty('name')) {
                obj.name = ApiClient.convertToType(data.name, 'String')
            }
            if (data.hasOwnProperty('options')) {
                obj.options = ApiClient.convertToType(data.options, [Option])
            }
            if (data.hasOwnProperty('page_description')) {
                obj.page_description = ApiClient.convertToType(data.page_description, 'String')
            }
            if (data.hasOwnProperty('page_keywords')) {
                obj.page_keywords = ApiClient.convertToType(data.page_keywords, 'String')
            }
            if (data.hasOwnProperty('page_title')) {
                obj.page_title = ApiClient.convertToType(data.page_title, 'String')
            }
            if (data.hasOwnProperty('price')) {
                obj.price = ApiClient.convertToType(data.price, 'Number')
            }
            if (data.hasOwnProperty('price_max')) {
                obj.price_max = ApiClient.convertToType(data.price_max, 'Number')
            }
            if (data.hasOwnProperty('prices')) {
                obj.prices = ApiClient.convertToType(data.prices, {String: 'Number'})
            }
            if (data.hasOwnProperty('primary_category_id')) {
                obj.primary_category_id = ApiClient.convertToType(data.primary_category_id, 'String')
            }
            if (data.hasOwnProperty('product_links')) {
                obj.product_links = ApiClient.convertToType(data.product_links, [ProductLink])
            }
            if (data.hasOwnProperty('product_promotions')) {
                obj.product_promotions = ApiClient.convertToType(data.product_promotions, [ProductPromotion])
            }
            if (data.hasOwnProperty('recommendations')) {
                obj.recommendations = ApiClient.convertToType(data.recommendations, [Recommendation])
            }
            if (data.hasOwnProperty('set_products')) {
                obj.set_products = ApiClient.convertToType(data.set_products, [Product])
            }
            if (data.hasOwnProperty('short_description')) {
                obj.short_description = ApiClient.convertToType(data.short_description, 'String')
            }
            if (data.hasOwnProperty('step_quantity')) {
                obj.step_quantity = ApiClient.convertToType(data.step_quantity, 'Number')
            }
            if (data.hasOwnProperty('type')) {
                obj.type = ProductType.constructFromObject(data.type)
            }
            if (data.hasOwnProperty('unit')) {
                obj.unit = ApiClient.convertToType(data.unit, 'String')
            }
            if (data.hasOwnProperty('upc')) {
                obj.upc = ApiClient.convertToType(data.upc, 'String')
            }
            if (data.hasOwnProperty('valid_from')) {
                obj.valid_from = ApiClient.convertToType(data.valid_from, 'Date')
            }
            if (data.hasOwnProperty('valid_to')) {
                obj.valid_to = ApiClient.convertToType(data.valid_to, 'Date')
            }
            if (data.hasOwnProperty('variants')) {
                obj.variants = ApiClient.convertToType(data.variants, [Variant])
            }
            if (data.hasOwnProperty('variation_attributes')) {
                obj.variation_attributes = ApiClient.convertToType(data.variation_attributes, [VariationAttribute])
            }
            if (data.hasOwnProperty('variation_groups')) {
                obj.variation_groups = ApiClient.convertToType(data.variation_groups, [VariationGroup])
            }
            if (data.hasOwnProperty('variation_values')) {
                obj.variation_values = ApiClient.convertToType(data.variation_values, {String: 'String'})
            }
        }
        return obj
    }

    /**
    * The product's brand.
    * @member {String} brand
    */
    brand = undefined;
    /**
    * The array of all bundled products of this product.
    * @member {Array.<module:models/BundledProduct>} bundled_products
    */
    bundled_products = undefined;
    /**
    * Signals if there are inventory lists for brick-and-mortar stores associated with this product.
    * @member {Boolean} c_availableForInStorePickup
    */
    c_availableForInStorePickup = undefined;
    /**
    * @member {String} c_batteryLife
    */
    c_batteryLife = undefined;
    /**
    * @member {String} c_batteryType
    */
    c_batteryType = undefined;
    /**
    * Type of Boot for search refinement.
    * @member {Array.<module:models/Product.CBootTypeEnum>} c_bootType
    */
    c_bootType = undefined;
    /**
    * Bottom type for search refinement
    * @member {Array.<module:models/Product.CBottomTypeEnum>} c_bottomType
    */
    c_bottomType = undefined;
    /**
    * Product color used for variation attribute
    * @member {String} c_color
    */
    c_color = undefined;
    /**
    * @member {String} c_consoleWarranty
    */
    c_consoleWarranty = undefined;
    /**
    * Use this attribute to apply custom styles for this product.
    * @member {String} c_customCSSFile
    */
    c_customCSSFile = undefined;
    /**
    * @member {Array.<module:models/Product.CDigitalCameraFeaturesEnum>} c_digitalCameraFeatures
    */
    c_digitalCameraFeatures = undefined;
    /**
    * @member {String} c_digitalCameraPixels
    */
    c_digitalCameraPixels = undefined;
    /**
    * @member {String} c_digitalCameraType
    */
    c_digitalCameraType = undefined;
    /**
    * @member {String} c_digitalCameraWarranty
    */
    c_digitalCameraWarranty = undefined;
    /**
    * @member {String} c_dimDepth
    */
    c_dimDepth = undefined;
    /**
    * @member {String} c_dimHeight
    */
    c_dimHeight = undefined;
    /**
    * @member {String} c_dimWeight
    */
    c_dimWeight = undefined;
    /**
    * @member {String} c_dimWidth
    */
    c_dimWidth = undefined;
    /**
    * @member {String} c_displaySize
    */
    c_displaySize = undefined;
    /**
    * @member {Array.<module:models/Product.CGameGenreEnum>} c_gameGenre
    */
    c_gameGenre = undefined;
    /**
    * @member {String} c_gameRating
    */
    c_gameRating = undefined;
    /**
    * @member {String} c_gameSystemType
    */
    c_gameSystemType = undefined;
    /**
    * @member {Array.<module:models/Product.CGpsFeaturesEnum>} c_gpsFeatures
    */
    c_gpsFeatures = undefined;
    /**
    * @member {Array.<module:models/Product.CGpsTypeEnum>} c_gpsType
    */
    c_gpsType = undefined;
    /**
    * @member {String} c_gpsWarranty
    */
    c_gpsWarranty = undefined;
    /**
    * @member {String} c_imageAspectRatio
    */
    c_imageAspectRatio = undefined;
    /**
    * @member {Boolean} c_isNew
    */
    c_isNew = undefined;
    /**
    * This indiciates if the product is a new arrival.
    * @member {Boolean} c_isNewtest
    */
    c_isNewtest = undefined;
    /**
    * This is the help text. It is used for sorting rules.
    * @member {Boolean} c_isSale
    */
    c_isSale = undefined;
    /**
    * Kids Age used for search refinements
    * @member {module:models/Product.CKidsAgeEnum} c_kidsAge
    */
    c_kidsAge = undefined;
    /**
    * This attribute is used for mens and womens pants lengths.
    * @member {String} c_length
    */
    c_length = undefined;
    /**
    * @member {String} c_lensAperture
    */
    c_lensAperture = undefined;
    /**
    * @member {Array.<module:models/Product.CMaterialTestEnum>} c_materialTest
    */
    c_materialTest = undefined;
    /**
    * Media Format
    * @member {Array.<module:models/Product.CMediaFormatEnum>} c_mediaFormat
    */
    c_mediaFormat = undefined;
    /**
    * Memory Size
    * @member {String} c_memorySize
    */
    c_memorySize = undefined;
    /**
    * @member {Array.<module:models/Product.CMemoryTypeEnum>} c_memoryType
    */
    c_memoryType = undefined;
    /**
    * @member {String} c_musicStorage
    */
    c_musicStorage = undefined;
    /**
    * @member {String} c_opticalZoom
    */
    c_opticalZoom = undefined;
    /**
    * Type of Outerwear for search refinement
    * @member {module:models/Product.COuterwearTypeEnum} c_outerwearType
    */
    c_outerwearType = undefined;
    /**
    * @member {Array.<module:models/Product.CPortableAudioTypeEnum>} c_portableAudioType
    */
    c_portableAudioType = undefined;
    /**
    * @member {module:models/Product.CRefinementColorEnum} c_refinementColor
    */
    c_refinementColor = undefined;
    /**
    * @member {String} c_resolution
    */
    c_resolution = undefined;
    /**
    * Type of Sandal for search refinement
    * @member {module:models/Product.CSandalTypeEnum} c_sandalType
    */
    c_sandalType = undefined;
    /**
    * test attribute
    * @member {Array.<module:models/Product.CSheetsEnum>} c_sheets
    */
    c_sheets = undefined;
    /**
    * Type of Shoe for search refinements
    * @member {module:models/Product.CShoeTypeEnum} c_shoeType
    */
    c_shoeType = undefined;
    /**
    * This attribute is used for all footwear, apparel and accessory sizing for men, women and kids products.
    * @member {String} c_size
    */
    c_size = undefined;
    /**
    * @member {Array.<module:models/Product.CSkinConcernEnum>} c_skinConcern
    */
    c_skinConcern = undefined;
    /**
    * @member {String} c_styleNumber
    */
    c_styleNumber = undefined;
    /**
    * @member {String} c_tabDescription
    */
    c_tabDescription = undefined;
    /**
    * @member {String} c_tabDetails
    */
    c_tabDetails = undefined;
    /**
    * @member {String} c_test
    */
    c_test = undefined;
    /**
    * Type of tops in clothing
    * @member {String} c_topType
    */
    c_topType = undefined;
    /**
    * @member {String} c_tvSignalFormat
    */
    c_tvSignalFormat = undefined;
    /**
    * @member {String} c_tvSize
    */
    c_tvSize = undefined;
    /**
    * @member {module:models/Product.CTvTypeEnum} c_tvType
    */
    c_tvType = undefined;
    /**
    * @member {String} c_tvWarranty
    */
    c_tvWarranty = undefined;
    /**
    * @member {String} c_videoStorage
    */
    c_videoStorage = undefined;
    /**
    * Attribute used for apparel waist sizing.
    * @member {String} c_waist
    */
    c_waist = undefined;
    /**
    * This attribute is used for shoe widths for mens, womens and kids.
    * @member {String} c_width
    */
    c_width = undefined;
    /**
    * The ISO 4217 mnemonic code of the currency.
    * @member {String} currency
    */
    currency = undefined;
    /**
    * The European Article Number.
    * @member {String} ean
    */
    ean = undefined;
    /**
    * @member {Number} fetch_date
    */
    fetch_date = undefined;
    /**
    * The id (SKU) of the product.
    * @member {String} id
    */
    id = undefined;
    /**
    * The array of product image groups.
    * @member {Array.<module:models/ImageGroup>} image_groups
    */
    image_groups = undefined;
    /**
    * The array of product inventories explicitly requested via 'inventory_ids' query parameter. This property  is only returned in context of the 'availability' expansion.
    * @member {Array.<module:models/Inventory>} inventories
    */
    inventories = undefined;
    /**
    * The site default inventory information. This property is only  returned in context of the 'availability' expansion.
    * @member {module:models/Inventory} inventory
    */
    inventory = undefined;
    /**
    * The localized product long description.
    * @member {String} long_description
    */
    long_description = undefined;
    /**
    * The products manufacturer name.
    * @member {String} manufacturer_name
    */
    manufacturer_name = undefined;
    /**
    * The products manufacturer sku.
    * @member {String} manufacturer_sku
    */
    manufacturer_sku = undefined;
    /**
    * The master product information. Only for types master, variation group and variant.
    * @member {module:models/Master} master
    */
    master = undefined;
    /**
    * The minimum order quantity for this product.
    * @member {Number} min_order_quantity
    */
    min_order_quantity = undefined;
    /**
    * The localized product name.
    * @member {String} name
    */
    name = undefined;
    /**
    * The array of product options. This array can be empty. Only for type option.
    * @member {Array.<module:models/Option>} options
    */
    options = undefined;
    /**
    * The localized products page description.
    * @member {String} page_description
    */
    page_description = undefined;
    /**
    * The localized products page description.
    * @member {String} page_keywords
    */
    page_keywords = undefined;
    /**
    * The localized products page title.
    * @member {String} page_title
    */
    page_title = undefined;
    /**
    * The sales price of the product. In case of complex products like master or set this is the minimum price of  related child products.
    * @member {Number} price
    */
    price = undefined;
    /**
    * The maximum sales of related child products in case of complex products like master or set.
    * @member {Number} price_max
    */
    price_max = undefined;
    /**
    * The prices map with price book ids and their values.
    * @member {Object.<String, Number>} prices
    */
    prices = undefined;
    /**
    * The id of the products primary category.
    * @member {String} primary_category_id
    */
    primary_category_id = undefined;
    /**
    * The array of source and target products links information.
    * @member {Array.<module:models/ProductLink>} product_links
    */
    product_links = undefined;
    /**
    * The array of active customer product promotions for this product. This array can be empty.  Coupon promotions are not returned in this array.
    * @member {Array.<module:models/ProductPromotion>} product_promotions
    */
    product_promotions = undefined;
    /**
    * Returns a list of recommendations.
    * @member {Array.<module:models/Recommendation>} recommendations
    */
    recommendations = undefined;
    /**
    * The array of set products of this product.
    * @member {Array.<module:models/Product>} set_products
    */
    set_products = undefined;
    /**
    * The localized product short description.
    * @member {String} short_description
    */
    short_description = undefined;
    /**
    * The steps in which the order amount of the product can be  increased.
    * @member {Number} step_quantity
    */
    step_quantity = undefined;
    /**
    * The product type information. Can be one or multiple of the following values: item,master,variation_group,variant,bundle,set.
    * @member {module:models/ProductType} type
    */
    type = undefined;
    /**
    * The sales unit of the product.
    * @member {String} unit
    */
    unit = undefined;
    /**
    * The Universal Product Code.
    * @member {String} upc
    */
    upc = undefined;
    /**
    * The time when product is valid from.
    * @member {Date} valid_from
    */
    valid_from = undefined;
    /**
    * The time when product is valid to.
    * @member {Date} valid_to
    */
    valid_to = undefined;
    /**
    * The array of actual variants. This array can be empty. Only for types master, variation group and variant.
    * @member {Array.<module:models/Variant>} variants
    */
    variants = undefined;
    /**
    * Sorted array of variation attributes information. This array can be empty. Only for types master,  variation group and variant.
    * @member {Array.<module:models/VariationAttribute>} variation_attributes
    */
    variation_attributes = undefined;
    /**
    * The array of actual variation groups. This array can be empty. Only for types master, variation group and variant.
    * @member {Array.<module:models/VariationGroup>} variation_groups
    */
    variation_groups = undefined;
    /**
    * The actual variation attribute id - value pairs. Only for type variant and  variation group.
    * @member {Object.<String, String>} variation_values
    */
    variation_values = undefined;






    /**
    * Allowed values for the <code>cBootType</code> property.
    * @enum {String}
    * @readonly
    */
    static CBootTypeEnum = {

        /**
         * value: "0010"
         * @const
         */
        '0010': '0010',

        /**
         * value: "0020"
         * @const
         */
        '0020': '0020',

        /**
         * value: "0030"
         * @const
         */
        '0030': '0030',

        /**
         * value: "0040"
         * @const
         */
        '0040': '0040',

        /**
         * value: "0050"
         * @const
         */
        '0050': '0050',

        /**
         * value: "0060"
         * @const
         */
        '0060': '0060',

        /**
         * value: "0070"
         * @const
         */
        '0070': '0070'
    };

    /**
    * Allowed values for the <code>cBottomType</code> property.
    * @enum {String}
    * @readonly
    */
    static CBottomTypeEnum = {

        /**
         * value: "0010"
         * @const
         */
        '0010': '0010',

        /**
         * value: "0020"
         * @const
         */
        '0020': '0020',

        /**
         * value: "0030"
         * @const
         */
        '0030': '0030',

        /**
         * value: "0040"
         * @const
         */
        '0040': '0040',

        /**
         * value: "0050"
         * @const
         */
        '0050': '0050',

        /**
         * value: "0060"
         * @const
         */
        '0060': '0060',

        /**
         * value: "0070"
         * @const
         */
        '0070': '0070',

        /**
         * value: "0080"
         * @const
         */
        '0080': '0080'
    };

    /**
    * Allowed values for the <code>cDigitalCameraFeatures</code> property.
    * @enum {String}
    * @readonly
    */
    static CDigitalCameraFeaturesEnum = {

        /**
         * value: "0010"
         * @const
         */
        '0010': '0010',

        /**
         * value: "0020"
         * @const
         */
        '0020': '0020',

        /**
         * value: "0030"
         * @const
         */
        '0030': '0030',

        /**
         * value: "0040"
         * @const
         */
        '0040': '0040',

        /**
         * value: "0050"
         * @const
         */
        '0050': '0050',

        /**
         * value: "0060"
         * @const
         */
        '0060': '0060',

        /**
         * value: "0070"
         * @const
         */
        '0070': '0070',

        /**
         * value: "0080"
         * @const
         */
        '0080': '0080',

        /**
         * value: "0090"
         * @const
         */
        '0090': '0090',

        /**
         * value: "0100"
         * @const
         */
        '0100': '0100',

        /**
         * value: "0110"
         * @const
         */
        '0110': '0110',

        /**
         * value: "0120"
         * @const
         */
        '0120': '0120',

        /**
         * value: "0130"
         * @const
         */
        '0130': '0130',

        /**
         * value: "0140"
         * @const
         */
        '0140': '0140',

        /**
         * value: "0150"
         * @const
         */
        '0150': '0150',

        /**
         * value: "0160"
         * @const
         */
        '0160': '0160',

        /**
         * value: "0170"
         * @const
         */
        '0170': '0170',

        /**
         * value: "0180"
         * @const
         */
        '0180': '0180',

        /**
         * value: "0190"
         * @const
         */
        '0190': '0190',

        /**
         * value: "0200"
         * @const
         */
        '0200': '0200',

        /**
         * value: "0210"
         * @const
         */
        '0210': '0210',

        /**
         * value: "0220"
         * @const
         */
        '0220': '0220',

        /**
         * value: "0230"
         * @const
         */
        '0230': '0230',

        /**
         * value: "0240"
         * @const
         */
        '0240': '0240',

        /**
         * value: "0250"
         * @const
         */
        '0250': '0250',

        /**
         * value: "0260"
         * @const
         */
        '0260': '0260',

        /**
         * value: "0270"
         * @const
         */
        '0270': '0270',

        /**
         * value: "0280"
         * @const
         */
        '0280': '0280'
    };

    /**
    * Allowed values for the <code>cGameGenre</code> property.
    * @enum {String}
    * @readonly
    */
    static CGameGenreEnum = {

        /**
         * value: "Action"
         * @const
         */
        Action: 'Action',

        /**
         * value: "Educational"
         * @const
         */
        Educational: 'Educational',

        /**
         * value: "Kids"
         * @const
         */
        Kids: 'Kids',

        /**
         * value: "Racing"
         * @const
         */
        Racing: 'Racing',

        /**
         * value: "Role-Playing"
         * @const
         */
        'Role-Playing': 'Role-Playing',

        /**
         * value: "Sports"
         * @const
         */
        Sports: 'Sports',

        /**
         * value: "Strategy"
         * @const
         */
        Strategy: 'Strategy'
    };

    /**
    * Allowed values for the <code>cGpsFeatures</code> property.
    * @enum {String}
    * @readonly
    */
    static CGpsFeaturesEnum = {

        /**
         * value: "0010"
         * @const
         */
        '0010': '0010',

        /**
         * value: "0020"
         * @const
         */
        '0020': '0020',

        /**
         * value: "0030"
         * @const
         */
        '0030': '0030',

        /**
         * value: "0040"
         * @const
         */
        '0040': '0040',

        /**
         * value: "0050"
         * @const
         */
        '0050': '0050',

        /**
         * value: "0060"
         * @const
         */
        '0060': '0060',

        /**
         * value: "0070"
         * @const
         */
        '0070': '0070',

        /**
         * value: "0080"
         * @const
         */
        '0080': '0080',

        /**
         * value: "0090"
         * @const
         */
        '0090': '0090',

        /**
         * value: "0100"
         * @const
         */
        '0100': '0100',

        /**
         * value: "0110"
         * @const
         */
        '0110': '0110',

        /**
         * value: "0120"
         * @const
         */
        '0120': '0120',

        /**
         * value: "0130"
         * @const
         */
        '0130': '0130',

        /**
         * value: "0140"
         * @const
         */
        '0140': '0140',

        /**
         * value: "0150"
         * @const
         */
        '0150': '0150',

        /**
         * value: "0160"
         * @const
         */
        '0160': '0160',

        /**
         * value: "0170"
         * @const
         */
        '0170': '0170',

        /**
         * value: "0180"
         * @const
         */
        '0180': '0180',

        /**
         * value: "0190"
         * @const
         */
        '0190': '0190',

        /**
         * value: "0200"
         * @const
         */
        '0200': '0200',

        /**
         * value: "0210"
         * @const
         */
        '0210': '0210',

        /**
         * value: "0230"
         * @const
         */
        '0230': '0230'
    };

    /**
    * Allowed values for the <code>cGpsType</code> property.
    * @enum {String}
    * @readonly
    */
    static CGpsTypeEnum = {

        /**
         * value: "0010"
         * @const
         */
        '0010': '0010',

        /**
         * value: "0020"
         * @const
         */
        '0020': '0020',

        /**
         * value: "0030"
         * @const
         */
        '0030': '0030',

        /**
         * value: "0040"
         * @const
         */
        '0040': '0040'
    };

    /**
    * Allowed values for the <code>c_kidsAge</code> property.
    * @enum {String}
    * @readonly
    */
    static CKidsAgeEnum = {

        /**
         * value: "0010"
         * @const
         */
        '0010': '0010',

        /**
         * value: "0020"
         * @const
         */
        '0020': '0020',

        /**
         * value: "0030"
         * @const
         */
        '0030': '0030',

        /**
         * value: "0040"
         * @const
         */
        '0040': '0040',

        /**
         * value: "0050"
         * @const
         */
        '0050': '0050',

        /**
         * value: "0060"
         * @const
         */
        '0060': '0060',

        /**
         * value: "0070"
         * @const
         */
        '0070': '0070'
    };

    /**
    * Allowed values for the <code>cMaterialTest</code> property.
    * @enum {String}
    * @readonly
    */
    static CMaterialTestEnum = {

        /**
         * value: "cotton"
         * @const
         */
        cotton: 'cotton',

        /**
         * value: "wool"
         * @const
         */
        wool: 'wool',

        /**
         * value: "polyester"
         * @const
         */
        polyester: 'polyester'
    };

    /**
    * Allowed values for the <code>cMediaFormat</code> property.
    * @enum {String}
    * @readonly
    */
    static CMediaFormatEnum = {

        /**
         * value: "0010"
         * @const
         */
        '0010': '0010',

        /**
         * value: "0020"
         * @const
         */
        '0020': '0020',

        /**
         * value: "0030"
         * @const
         */
        '0030': '0030',

        /**
         * value: "0040"
         * @const
         */
        '0040': '0040',

        /**
         * value: "0050"
         * @const
         */
        '0050': '0050',

        /**
         * value: "0060"
         * @const
         */
        '0060': '0060',

        /**
         * value: "0070"
         * @const
         */
        '0070': '0070',

        /**
         * value: "0080"
         * @const
         */
        '0080': '0080',

        /**
         * value: "0090"
         * @const
         */
        '0090': '0090',

        /**
         * value: "0100"
         * @const
         */
        '0100': '0100'
    };

    /**
    * Allowed values for the <code>cMemoryType</code> property.
    * @enum {String}
    * @readonly
    */
    static CMemoryTypeEnum = {

        /**
         * value: "0010"
         * @const
         */
        '0010': '0010',

        /**
         * value: "0020"
         * @const
         */
        '0020': '0020',

        /**
         * value: "0030"
         * @const
         */
        '0030': '0030',

        /**
         * value: "0040"
         * @const
         */
        '0040': '0040',

        /**
         * value: "0050"
         * @const
         */
        '0050': '0050',

        /**
         * value: "0060"
         * @const
         */
        '0060': '0060',

        /**
         * value: "0070"
         * @const
         */
        '0070': '0070',

        /**
         * value: "0080"
         * @const
         */
        '0080': '0080',

        /**
         * value: "0090"
         * @const
         */
        '0090': '0090'
    };

    /**
    * Allowed values for the <code>c_outerwearType</code> property.
    * @enum {String}
    * @readonly
    */
    static COuterwearTypeEnum = {

        /**
         * value: "0010"
         * @const
         */
        '0010': '0010',

        /**
         * value: "0020"
         * @const
         */
        '0020': '0020',

        /**
         * value: "0030"
         * @const
         */
        '0030': '0030',

        /**
         * value: "0040"
         * @const
         */
        '0040': '0040',

        /**
         * value: "0050"
         * @const
         */
        '0050': '0050',

        /**
         * value: "0060"
         * @const
         */
        '0060': '0060',

        /**
         * value: "0070"
         * @const
         */
        '0070': '0070',

        /**
         * value: "0080"
         * @const
         */
        '0080': '0080'
    };

    /**
    * Allowed values for the <code>cPortableAudioType</code> property.
    * @enum {String}
    * @readonly
    */
    static CPortableAudioTypeEnum = {

        /**
         * value: "0010"
         * @const
         */
        '0010': '0010',

        /**
         * value: "0020"
         * @const
         */
        '0020': '0020',

        /**
         * value: "0030"
         * @const
         */
        '0030': '0030'
    };

    /**
    * Allowed values for the <code>c_refinementColor</code> property.
    * @enum {String}
    * @readonly
    */
    static CRefinementColorEnum = {

        /**
         * value: "black"
         * @const
         */
        black: 'black',

        /**
         * value: "blue"
         * @const
         */
        blue: 'blue',

        /**
         * value: "green"
         * @const
         */
        green: 'green',

        /**
         * value: "red"
         * @const
         */
        red: 'red',

        /**
         * value: "orange"
         * @const
         */
        orange: 'orange',

        /**
         * value: "pink"
         * @const
         */
        pink: 'pink',

        /**
         * value: "purple"
         * @const
         */
        purple: 'purple',

        /**
         * value: "white"
         * @const
         */
        white: 'white',

        /**
         * value: "yellow"
         * @const
         */
        yellow: 'yellow',

        /**
         * value: "grey"
         * @const
         */
        grey: 'grey',

        /**
         * value: "beige"
         * @const
         */
        beige: 'beige',

        /**
         * value: "miscellaneous"
         * @const
         */
        miscellaneous: 'miscellaneous',

        /**
         * value: "brown"
         * @const
         */
        brown: 'brown',

        /**
         * value: "navy"
         * @const
         */
        navy: 'navy'
    };

    /**
    * Allowed values for the <code>c_sandalType</code> property.
    * @enum {String}
    * @readonly
    */
    static CSandalTypeEnum = {

        /**
         * value: "0010"
         * @const
         */
        '0010': '0010',

        /**
         * value: "0020"
         * @const
         */
        '0020': '0020',

        /**
         * value: "0030"
         * @const
         */
        '0030': '0030'
    };

    /**
    * Allowed values for the <code>cSheets</code> property.
    * @enum {String}
    * @readonly
    */
    static CSheetsEnum = {

        /**
         * value: "value1"
         * @const
         */
        value1: 'value1',

        /**
         * value: "value2"
         * @const
         */
        value2: 'value2',

        /**
         * value: "value3"
         * @const
         */
        value3: 'value3'
    };

    /**
    * Allowed values for the <code>c_shoeType</code> property.
    * @enum {String}
    * @readonly
    */
    static CShoeTypeEnum = {

        /**
         * value: "0010"
         * @const
         */
        '0010': '0010',

        /**
         * value: "0020"
         * @const
         */
        '0020': '0020',

        /**
         * value: "0030"
         * @const
         */
        '0030': '0030',

        /**
         * value: "0040"
         * @const
         */
        '0040': '0040',

        /**
         * value: "0050"
         * @const
         */
        '0050': '0050',

        /**
         * value: "0060"
         * @const
         */
        '0060': '0060',

        /**
         * value: "0070"
         * @const
         */
        '0070': '0070',

        /**
         * value: "0080"
         * @const
         */
        '0080': '0080',

        /**
         * value: "0090"
         * @const
         */
        '0090': '0090',

        /**
         * value: "0100"
         * @const
         */
        '0100': '0100',

        /**
         * value: "0110"
         * @const
         */
        '0110': '0110'
    };

    /**
    * Allowed values for the <code>cSkinConcern</code> property.
    * @enum {String}
    * @readonly
    */
    static CSkinConcernEnum = {

        /**
         * value: "dryTight"
         * @const
         */
        dryTight: 'dryTight',

        /**
         * value: "comprehensive"
         * @const
         */
        comprehensive: 'comprehensive',

        /**
         * value: "liftingLossFirm"
         * @const
         */
        liftingLossFirm: 'liftingLossFirm'
    };

    /**
    * Allowed values for the <code>c_tvType</code> property.
    * @enum {String}
    * @readonly
    */
    static CTvTypeEnum = {

        /**
         * value: "0010"
         * @const
         */
        '0010': '0010',

        /**
         * value: "0020"
         * @const
         */
        '0020': '0020',

        /**
         * value: "0030"
         * @const
         */
        '0030': '0030',

        /**
         * value: "0040"
         * @const
         */
        '0040': '0040'
    };



}