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 =
IDattribute of productParentID =
ParentIDattribute of productUserTypeID =
UserTypeIDattribute of productIsSet = if UserTypeID is
prd_BundleArticleFixedComponentsIsBundle = if UserTypeID is
prd_BundleArticleConfigurableComponentsIsTradeUnit = if UserTypeID is
RIT_TUIsVariant = if UserTypeID is
RIT_VariantIsArticle = if UserTypeID is
RIT_ArticleIsProduct = if UserTypeID is
prd_ProductPrimitiveName = product element
Nameelse product elementProductNameIsDigitalGiftCard = the BackendID is one of:
TU1330728TU3007279TU3007201TU3007284TU3007280
IsGreetingCard = the BackendID is one of:
TU2018006TU2018008TU2018010TU2018011TU2009330TU2009333TU2009334TU2009335TU7086781
ProductType is set to
BundleProductwhen IsBundle or IsSetGreetingCardis added when IsGreetingCardGiftCardandCustomPricingis added whenProductIDis95_GiftCardsServiceifProductID(from STEP) is16_Spa City Rituals(overwrites previous)Marketingis added whenProductIDis one of:11_Merchandising15_Styling10_Tester21_Activation25_XMAS_Hampers_Rituals_Staff26_MDC_POS_Promo27_MDC_Activation28_Conceptual_Maintenance31_Shopwear
Stockis added when `IsTradeUnitor has aBarcodeCUand notMarketingand not IsDigitalGiftCardVirtualProductis added when `IsTradeUnitor has aBarcodeCUand IsDigitalGiftCardConfigurableis 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 ifyes(case-insensitive), else true) - online_valid = step property
OnlineValidset toY(or any children have it set toY) - available_app = step property
AvailableAppset totrue(or any children have it set totrue) - available_social_order_service = step property
AvailableInSocialset totrue(or any children have it set totrue) - is_hazmat = step property
Warningexists (we don't care about the value) - best_seller = step property
BESTSELLERexists (we don't care about the value) - scaling_factor_image = step property
ScalingFactorImagedivided by 100, else 0 - is_talisman = product IsBundle or IsSet and PrimitiveName contains
Talisman(case-sensitive) - step_option_only = step property
OptionOnlyset toY, else not set - customizable_set = step property
att_Customizeset toYES(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