tessguefen
3/5/2015 - 5:40 AM

Variant Export (xml). -- only works if ATTRIBUTES have been imported already

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)