Variant Export (xml). -- only works if ATTRIBUTES have been imported already
<mvt:assign name="g.tab" value="asciichar(9)" />
<mvt:assign name="l.settings:query:query" value="'SELECT * FROM s01_ProductVariants GROUP BY variant_id'" />
<mvt:item name="sql" param="l.settings:query" />
<mvt:foreach iterator="row" array="query:results">
<mvt:comment> ===Get Product Code=== </mvt:comment>
<mvt:assign name="l.settings:productCode:query" value="'SELECT code FROM s01_Products WHERE id = ' $ l.settings:row:product_id" />
<mvt:item name="sql" param="l.settings:productCode" />
<mvt:foreach iterator="p" array="productCode:results">
<mvt:assign name="l.settings:pcode" value="l.settings:p" />
</mvt:foreach>
<mvt:comment> ===//Get Product Code=== </mvt:comment>
<ProductVariant_Add product_code="&mvt:pcode;">
&mvt:global:tab;<Options>
<mvt:comment> ===Get Attribute Code + Option=== </mvt:comment>
<mvt:assign name="l.settings:options:query" value="'SELECT * FROM s01_ProductVariants WHERE product_id = ' $ l.settings:row:product_id $ ' AND variant_id = ' $ l.settings:row:variant_id" />
<mvt:item name="sql" param="l.settings:options" />
<mvt:foreach iterator="o" array="options:results">
<mvt:assign name="l.settings:attributecodes:query" value="'SELECT code, type FROM s01_Attributes WHERE id = ' $ l.settings:o:attr_id " />
<mvt:item name="sql" param="l.settings:attributecodes" />
<mvt:foreach iterator="ac" array="attributecodes:results">
<mvt:assign name="l.settings:attributeCode" value="l.settings:ac:code" />
<mvt:assign name="l.settings:attributeType" value="l.settings:ac:type" />
</mvt:foreach>
<mvt:comment> === Check if it's a template ===</mvt:comment>
<mvt:if expr="l.settings:attributeType NE 'template'">
<mvt:assign name="l.settings:optioncodes:query" value="'SELECT code FROM s01_Options WHERE id = ' $ l.settings:o:option_id" />
<mvt:item name="sql" param="l.settings:optioncodes" />
<mvt:foreach iterator="oc" array="optioncodes:results">
<mvt:assign name="l.settings:optionCode" value="l.settings:oc" />
</mvt:foreach>
<mvt:else>
<mvt:assign name="l.settings:optioncodes:query" value="'SELECT code FROM s01_AttributeTemplateOptions WHERE id = ' $ l.settings:o:option_id" />
<mvt:item name="sql" param="l.settings:optioncodes" />
<mvt:foreach iterator="oc" array="optioncodes:results">
<mvt:assign name="l.settings:optionCode" value="l.settings:oc" />
</mvt:foreach>
</mvt:if>
<mvt:if expr="l.settings:attributeType EQ 'template'">
<mvt:assign name="l.settings:attributeTemplate:query" value="'SELECT code, type FROM s01_AttributeTemplateAttrs WHERE id = ' $ l.settings:o:attmpat_id" />
<mvt:item name="sql" param="l.settings:attributeTemplate" />
<mvt:foreach iterator="at" array="attributeTemplate:results">
<mvt:assign name="l.settings:templateAttributeCode" value="l.settings:at:code" />
<mvt:assign name="l.settings:templateAttributeType" value="l.settings:at:type" />
</mvt:foreach>
<mvt:if expr="l.settings:templateAttributeType EQ 'select' OR l.settings:templateAttributeType EQ 'swatch-select' OR l.settings:templateAttributeType EQ 'radio'">
&mvt:global:tab;&mvt:global:tab;<AttributeTemplateAttribute_Option attribute_code="&mvt:attributeCode;" attributetemplateattribute_code="&mvt:templateAttributeCode;" option_code="&mvt:optionCode;" />
<mvt:else>
&mvt:global:tab;&mvt:global:tab;<AttributeTemplateAttribute_Boolean attribute_code="&mvt:attributeCode;" attributetemplateattribute_code="&mvt:templateAttributeCode;" option_code="&mvt:optionCode;" />
</mvt:if>
<mvt:elseif expr="l.settings:attributeType EQ 'select' OR l.settings:attributeType EQ 'swatch-select' OR l.settings:attributeType EQ 'radio'">
&mvt:global:tab;&mvt:global:tab;<Attribute_Option attribute_code="&mvt:attributeCode;" option_code="&mvt:optionCode;" />
<mvt:else>
&mvt:global:tab;&mvt:global:tab;<Attribute_Boolean attribute_code="&mvt:attributeCode;" present="true" />
</mvt:if>
</mvt:foreach>
&mvt:global:tab;</Options>
&mvt:global:tab;<Parts>
<mvt:comment> ===Get Variant ID ===</mvt:comment>
<mvt:assign name="l.settings:variant_id:query" value="'SELECT * FROM s01_ProductVariantParts WHERE variant_id = ' $ l.settings:row:variant_id" />
<mvt:item name="sql" param="l.settings:variant_id" />
<mvt:foreach iterator="v" array="variant_id:results">
<mvt:assign name="l.settings:partCode:query" value="'SELECT code FROM s01_Products WHERE id = ' $ l.settings:v:part_id" />
<mvt:item name="sql" param="l.settings:partCode" />
<mvt:foreach iterator="part" array="partCode:results">
<mvt:assign name="l.settings:partc" value="l.settings:part" />
</mvt:foreach>
&mvt:global:tab;&mvt:global:tab;<Part product_code="&mvt:partc;" quantity="&mvt:v:quantity;" />
</mvt:foreach>
&mvt:global:tab;</Parts>
&mvt:global:tab;<ProductVariantPricing>
<mvt:comment> ===Variant Pricing===</mvt:comment>
<mvt:assign name="l.settings:variantPricing:query" value="'SELECT * FROM s01_ProductVariantPricing WHERE variant_id = ' $ l.settings:row:variant_id" />
<mvt:item name="sql" param="l.settings:variantPricing" />
<mvt:foreach iterator="vp" array="variantPricing:results">
<mvt:assign name="l.settings:vpmethod" value="l.settings:vp:method" />
<mvt:assign name="l.settings:vpprice" value="l.settings:vp:price" />
<mvt:assign name="l.settings:vpcost" value="l.settings:vp:cost" />
<mvt:assign name="l.settings:vpweight" value="l.settings:vp:weight" />
</mvt:foreach>
<mvt:if expr="l.settings:vpmethod EQ 1">
<mvt:assign name="l.settings:vpmethod" value="'specific'" />
<mvt:elseif expr="l.settings:vpmethod EQ 2">
<mvt:assign name="l.settings:vpmethod" value="'sum'" />
<mvt:else>
<mvt:assign name="l.settings:vpmethod" value="'master'" />
</mvt:if>
&mvt:global:tab;&mvt:global:tab;<Method>&mvt:vpmethod;</Method>
&mvt:global:tab;&mvt:global:tab;<Price>&mvt:vpprice;</Price>
&mvt:global:tab;&mvt:global:tab;<Cost>&mvt:vpcost;</Cost>
&mvt:global:tab;&mvt:global:tab;<Weight>&mvt:vpweight;</Weight>
&mvt:global:tab;</ProductVariantPricing>
</ProductVariant_Add>
<mvt:assign name="l.settings:lastVariant" value="l.settings:row:variant_id" />
</mvt:foreach>
<ProductVariant_Add product_code="home-for-the-holidays-candle">
<Options>
<Attribute_Option attribute_code="scent" option_code="balsam_forest" />
</Options>
<Parts>
<Part product_code="home-for-the-holidays-candle_balsam_forest" quantity="1" />
</Parts>
<ProductVariantPricing>
<Method>sum</Method>
<Price>25</Price>
<Cost>0</Cost>
<Weight>0</Weight>
</ProductVariantPricing>
</ProductVariant_Add>
<ProductVariant_Add product_code="home-for-the-holidays-candle">
<Options>
<Attribute_Option attribute_code="scent" option_code="spiced_cider" />
</Options>
<Parts>
<Part product_code="home-for-the-holidays-candle_spiced_cider" quantity="1" />
</Parts>
<ProductVariantPricing>
<Method>sum</Method>
<Price>25</Price>
<Cost>0</Cost>
<Weight>0</Weight>
</ProductVariantPricing>
</ProductVariant_Add>
<ProductVariant_Add product_code="home-for-the-holidays-candle">
<Options>
<Attribute_Option attribute_code="scent" option_code="peppermint_vanilla" />
</Options>
<Parts>
<Part product_code="home-for-the-holidays-candle_peppermint_vanilla" quantity="1" />
</Parts>
<ProductVariantPricing>
<Method>sum</Method>
<Price>25</Price>
<Cost>0</Cost>
<Weight>0</Weight>
</ProductVariantPricing>
</ProductVariant_Add>
<ProductVariant_Add product_code="cute-infuser">
<Options>
<Attribute_Option attribute_code="animal" option_code="manatee" />
<Attribute_Option attribute_code="size" option_code="small" />
</Options>
<Parts>
<Part product_code="cute-infuser_manatee_small" quantity="1" />
</Parts>
<ProductVariantPricing>
<Method>sum</Method>
<Price>9.99</Price>
<Cost>5</Cost>
<Weight>0</Weight>
</ProductVariantPricing>
</ProductVariant_Add>
<ProductVariant_Add product_code="cute-infuser">
<Options>
<Attribute_Option attribute_code="animal" option_code="manatee" />
<Attribute_Option attribute_code="size" option_code="large" />
</Options>
<Parts>
<Part product_code="cute-infuser_manatee_large" quantity="1" />
</Parts>
<ProductVariantPricing>
<Method>sum</Method>
<Price>11.99</Price>
<Cost>5</Cost>
<Weight>0</Weight>
</ProductVariantPricing>
</ProductVariant_Add>
<ProductVariant_Add product_code="cute-infuser">
<Options>
<Attribute_Option attribute_code="animal" option_code="squirrel" />
<Attribute_Option attribute_code="size" option_code="small" />
</Options>
<Parts>
<Part product_code="cute-infuser_squirrel_small" quantity="1" />
</Parts>
<ProductVariantPricing>
<Method>sum</Method>
<Price>9.99</Price>
<Cost>5</Cost>
<Weight>0</Weight>
</ProductVariantPricing>
</ProductVariant_Add>
<ProductVariant_Add product_code="cute-infuser">
<Options>
<Attribute_Option attribute_code="animal" option_code="squirrel" />
<Attribute_Option attribute_code="size" option_code="large" />
</Options>
<Parts>
<Part product_code="cute-infuser_squirrel_large" quantity="1" />
</Parts>
<ProductVariantPricing>
<Method>sum</Method>
<Price>11.99</Price>
<Cost>5</Cost>
<Weight>0</Weight>
</ProductVariantPricing>
</ProductVariant_Add>
<ProductVariant_Add product_code="owl-cups">
<Options>
<AttributeTemplateAttribute_Option attribute_code="owl_colors" attributetemplateattribute_code="color_set" option_code="green" />
</Options>
<Parts>
<Part product_code="green-owl-set" quantity="1" />
</Parts>
<ProductVariantPricing>
<Method>sum</Method>
<Price>29.99</Price>
<Cost>12</Cost>
<Weight>0</Weight>
</ProductVariantPricing>
</ProductVariant_Add>
<ProductVariant_Add product_code="owl-cups">
<Options>
<AttributeTemplateAttribute_Option attribute_code="owl_colors" attributetemplateattribute_code="color_set" option_code="teal" />
</Options>
<Parts>
<Part product_code="teal-owl-set" quantity="1" />
</Parts>
<ProductVariantPricing>
<Method>sum</Method>
<Price>29.99</Price>
<Cost>12</Cost>
<Weight>0</Weight>
</ProductVariantPricing>
</ProductVariant_Add>
<ProductVariant_Add product_code="owl-cups">
<Options>
<AttributeTemplateAttribute_Option attribute_code="owl_colors" attributetemplateattribute_code="color_set" option_code="pink" />
</Options>
<Parts>
<Part product_code="pink-owl-set" quantity="1" />
</Parts>
<ProductVariantPricing>
<Method>sum</Method>
<Price>29.99</Price>
<Cost>12</Cost>
<Weight>0</Weight>
</ProductVariantPricing>
</ProductVariant_Add>
= !!! = This requires the use of Gassan's SQL module.
Import/ Update Variants that were NOT auto-generated.
To-dos:
- Add Product Kit xml provisioning (do a check for this)
- Test with Boolean
===
Completed TODOs
/ Check for multiple Parts (aka: 1 shirt + 1 sock)
/ Check for multiple Options (aka: size + color)
/ Add tabs (to make it look pretty when you paste it in an editor)
/ Do a check for AttributeOption / Boolean. (attribute table)
/ Check for Attribute Templates (in DB just didn't do a check for it)