Skip to main content

STEP Import

The STEP Import is essentially a whole bunch of files dumped on an FTP. At predefined times we trigger an import of products.

ImportProductsTask#

First, we loop through all files in the folder /Outbox/Stepout-Products that end with .zip or .xml (depends on setting)

Second, we read products and parse the contents, we map these to a RitualsProduct and a basic ProductToImport where the RitualsProduct contains all data from the STEP import and the ProductToImport represents the product to import into EVA.

Next, we configure the ProductToImport through a number of categories of logic. Below is a overview of these categories:

Assortments#

On import start:

We make sure all countries (OUs with type country) have an assortment. If not, we create it.

For every product:

We determine the PhaseInPhaseOutDates (these are per contry, and are sent as eg: phase_in_NL), when these are not set, but the product has children, we use theirs (mapped to a single in/out). For each country, we link the product to the country's assortment (with the configured PhaseInPhaseOutDates)

All#

  • BackendID = ID attribute of product

  • ParentID = ParentID attribute of product

  • UserTypeID = UserTypeID attribute of product

  • IsSet = if UserTypeID is prd_BundleArticleFixedComponents

  • IsBundle = if UserTypeID is prd_BundleArticleConfigurableComponents

  • IsTradeUnit = if UserTypeID is RIT_TU

  • IsVariant = if UserTypeID is RIT_Variant

  • IsArticle = if UserTypeID is RIT_Article

  • IsProduct = if UserTypeID is prd_Product

  • PrimitiveName = product element Name else product element ProductName

  • IsDigitalGiftCard = the BackendID is one of:

    • TU1330728
    • TU3007279
    • TU3007201
    • TU3007284
    • TU3007280
  • IsGreetingCard = the BackendID is one of:

    • TU2018006
    • TU2018008
    • TU2018010
    • TU2018011
    • TU2009330
    • TU2009333
    • TU2009334
    • TU2009335
    • TU7086781
  • ProductType is set to

    • BundleProduct when IsBundle or IsSet
    • GreetingCard is added when IsGreetingCard
    • GiftCard and CustomPricing is added when ProductID is 95_GiftCards
    • Service if ProductID (from STEP) is 16_Spa City Rituals (overwrites previous)
    • Marketing is added when ProductIDis one of:
      • 11_Merchandising
      • 15_Styling
      • 10_Tester
      • 21_Activation
      • 25_XMAS_Hampers_Rituals_Staff
      • 26_MDC_POS_Promo
      • 27_MDC_Activation
      • 28_Conceptual_Maintenance
      • 31_Shopwear
    • Stock is added when `IsTradeUnit or has a BarcodeCU and not Marketing and not IsDigitalGiftCard
    • VirtualProduct is added when `IsTradeUnit or has a BarcodeCU and IsDigitalGiftCard
    • Configurable is added when IsArticle and it has a IsVariant parent or it is IsVariant itself

Barcodes#

For every product:

We register the BarcodeCU property as the barcode for 1 item (when present).

We register the BarcodeTU property as the barcode for a box (when present). The quantity is determined by the Collation property (with a minimum of 1).

ContentEditor#

For every product:

We set the following properties as follows (these have specific logic):

  • exclude_from_giftwrapping = step property GiftWrapIndicator (false if yes (case-insensitive), else true)
  • online_valid = step property OnlineValid set to Y (or any children have it set to Y)
  • available_app = step property AvailableApp set to true (or any children have it set to true)
  • available_social_order_service = step property AvailableInSocial set to true (or any children have it set to true)
  • is_hazmat = step property Warning exists (we don't care about the value)
  • best_seller = step property BESTSELLER exists (we don't care about the value)
  • scaling_factor_image = step property ScalingFactorImage divided by 100, else 0
  • is_talisman = product IsBundle or IsSet and PrimitiveName contains Talisman (case-sensitive)
  • step_option_only = step property OptionOnly set to Y, else not set
  • customizable_set = step property att_Customize set to YES (case-insensitive), else not set
  • search_placement_id = step property DW_SearchPlacement, else not set
  • tax_class = step property TaxCode, else not set

We set the following properties as follows:

  • top_notes_1 comes from the STEP property ptp_TopNotes1
  • top_notes_2 comes from the STEP property ptp_TopNotes2
  • top_notes_3 comes from the STEP property ptp_TopNotes3
  • base_notes_1 comes from the STEP property ptp_BaseNotes1
  • base_notes_2 comes from the STEP property ptp_BaseNotes2
  • base_notes_3 comes from the STEP property ptp_BaseNotes3
  • heart_notes_1 comes from the STEP property ptp_HeartNotes1
  • heart_notes_2 comes from the STEP property ptp_HeartNotes2
  • heart_notes_3 comes from the STEP property ptp_HeartNotes3
  • step_product_detail_title comes from the STEP property att_ProductDetailTitle
  • step_product_detail_description comes from the STEP property att_ProductDetailDescription
  • color_group_hor comes from the STEP property att_ColorGroupHoR
  • fragrance_hor comes from the STEP property att_FragranceHoR
  • fragrance_family comes from the STEP property att_FragranceFamily
  • bottle_shape comes from the STEP property att_BottleShape
  • name_color_design comes from the STEP property att_NameColorDesign
  • duration_label comes from the STEP property att_Duration
  • item_size_textile comes from the STEP property att_ItemSizeTextile
  • item_size_height comes from the STEP property att_ItemSizeHeightCm
  • item_size_width comes from the STEP property att_ItemSizeWidthCm
  • ancient_ritual_ecom comes from the STEP property AncientRitualEcom
  • barcode_cu comes from the STEP property BarcodeCU
  • barcode_tu comes from the STEP property BarcodeTU
  • box_contains comes from the STEP property BoxContains
  • color comes from the STEP property Color
  • composition comes from the STEP property Composition
  • condition comes from the STEP property Condition
  • consumer_code comes from the STEP property Consumercode
  • content_quantity comes from the STEP property Content
  • current_price_eur comes from the STEP property CurrentPriceProduct
  • current_price_au comes from the STEP property CurrentPriceProductAU
  • mark_up_price_eur comes from the STEP property CurrentPriceProductEUR2o
  • current_price_us comes from the STEP property CurrentPriceProductUS
  • seo_article_page_description comes from the STEP property DW - SEO Article PageDescription
  • searchable comes from the STEP property DW_Searchable
  • search_placement comes from the STEP property DW_SearchPlacement
  • refinement_category comes from the STEP property DW-refinementCategory
  • seo_article_page_title comes from the STEP property DW-SEOArticlePageTitle
  • e_comm_active comes from the STEP property eCommActive
  • e_comm_label_text comes from the STEP property eCommLabelText
  • gender_sw comes from the STEP property GenderSW
  • inci comes from the STEP property INCI
  • instructions_for_use comes from the STEP property InstructionsForUse
  • item_status comes from the STEP property ItemStatus
  • item_size_sw comes from the STEP property ItemSizeSW
  • long_product_description_seo comes from the STEP property Long Product Description-SEO
  • marketing_long_description comes from the STEP property Marketing Long Description
  • marketing_short_description comes from the STEP property Marketing Short Description
  • marketing_usps comes from the STEP property MarketingUSPs
  • market_item_is_sold comes from the STEP property MarketItemIsSold
  • product_name comes from the STEP property ProductName
  • quality comes from the STEP property Quality
  • rit_primary_color comes from the STEP property RIT_PrimaryColor
  • rit_product_name_website comes from the STEP property RIT_ProductNameWebsite
  • rit_previously_known comes from the STEP property RIT_PreviouslyKnown
  • sales_vat comes from the STEP property SalesVAT
  • sales_vat_product comes from the STEP property SalesVATProduct
  • seo_calculated comes from the STEP property SEO Calculated
  • short_product_description comes from the STEP property ShortProductDescription
  • long_product_description comes from the STEP property LongProductDescription
  • size_range comes from the STEP property SizeRange
  • soulwear_material_web comes from the STEP property Soulwear Material (Web)
  • tax_code comes from the STEP property TaxCode
  • tradecode comes from the STEP property Tradecode
  • usp1 comes from the STEP property USP1
  • usp2 comes from the STEP property USP2
  • usp3 comes from the STEP property USP3
  • usp4 comes from the STEP property USP4
  • usp5 comes from the STEP property USP5
  • usp6 comes from the STEP property USP6
  • ecom_usp1 comes from the STEP property att_eComUSP1
  • ecom_usp2 comes from the STEP property att_eComUSP2
  • ecom_usp3 comes from the STEP property att_eComUSP3
  • warning comes from the STEP property Warning
  • dangerous_goods_classification comes from the STEP property DangerousGoodsClassification
  • un_classification comes from the STEP property UNClassification
  • net_weight comes from the STEP property NetWeightProduct
  • grundprice comes from the STEP property Grundprice
  • merchandising comes from the STEP property Merchandising
  • spa comes from the STEP property Spa
  • soulwear comes from the STEP property Soulwear
  • styling comes from the STEP property Styling
  • product_title_ecom comes from the STEP property ProductTitleEcom
  • how_to_use_block comes from the STEP property HowToUseBlock
  • step_product_range comes from the STEP property Range

Giftcard#

For every product:

If the product IsGiftCard, we set the GiftCardType to INTERSOLVE. When it not IsDigitalGiftCard, we set the StockResource to RequiredForSale = true.

If the setting Rituals:Loyalty:MemberCards contains the CustomID of the product, we also set the StockResource to RequiredForSale = true. However, we also make sure it does not have the product type GiftCard because member cards are not activated by intersolve.

Prices#

For every product:

Prices are configured for all products that are: IsBundle, IsSet, IsTradeUnit (from STEP) or has a BarcodeCU (from STEP).

Productstatus#

For every product:

The publication statuses for the no-language content are set to import, public and step_status_STEPSTATUS where STEPSTATUS comese from STEP property ItemStatus.

If the product is a giftcard but not a digital giftcard, the productstatus DisablePickup is added.

SearchWhenUnavailable#

For every product:

Set the property hide_when_out_of_stock_in based on the DW_NotSearchableIfUnavailable property from STEP.

Talisman#

For every product:

If the product IsTalisman, we add the following product requirements:

  • talisman-name type: string, required: true, array: false
  • batch-code type: string, required:true, array:false