Traditional CBC (Choice Based Conjoint)
mobile-phone
Traditional Choice Based Conjoint

For this setup, upload the dat file on the survey "upload file" page and call the below script for calling the design file


<exec when="init">
def getCodeFile(fname, zipHeader):
  try:
      CodesData = File( "%s/%s" % (gv.survey.path, fname), zipHeader)
  except IOError:
      CodesData = ""
  return CodesData
</exec>

<exec when="init">
tcbcd = getCodeFile("cbc_design.dat", "code")
</exec>

After this copy the question replace list, update attributes (and no. of attributes), update looprows (based on tasks), update question label and update piping of attributes for CBC question accordingly.


  <quota label="TcbcQu" overquota="noqual" sheet="CBCversion"/>

  <number 
   label="TCBC_Version"
   size="3"
   where="execute,survey,report">
    <title>CBC Version</title>
    <exec>
print p.markers
for x in p.markers:
    if "/CBCversion/varCBC_" in x:
        TCBC_Version.val = int(x.split("_")[-1])
        break
    </exec>

  </number>

  <suspend/>

  <define label="att_tCBC1_list">
    <row label="r1"><span class="pricebig">$79</span></row>
    <row label="r2"><span class="pricebig">$129</span></row>
    <row label="r3"><span class="pricebig">$179</span></row>
    <row label="r4"><span class="pricebig">$229</span></row>
    <row label="r5"><span class="pricebig">$279</span></row>
    <row label="r6"><span class="pricebig">$329</span></row></define>
  <define label="att_tCBC2_list">
    <row label="r1"><u>Both</u> fitness center and restaurant on-site</row>
    <row label="r2"><u>Only fitness center</u> on-site</row>
    <row label="r3"><u>Only restaurant</u> on-site</row>
    <row label="r4"><u>No</u> fitness center or restaurant on-site</row></define>
  <define label="att_tCBC3_list">
    <row label="r1">Marriott</row>
    <row label="r2">Hilton</row>
    <row label="r3">IHG</row>
    <row label="r4">Wyndham</row>
    <row label="r5">Choice Hotels</row>
    <row label="r6">Hyatt</row>
    <row label="r7">Radisson</row>
    <row label="r8">Best Western</row>
    <row label="r9">Independent</row></define>
  <define label="att_tCBC4_list">
    <row label="r1">Enhanced high-speed internet</row>
    <row label="r2">High-speed internet</row>
    <row label="r3">Only access to public wi-fi network</row></define>
  <define label="att_tCBC5_list">
    <row label="r1">Guest Room, 1 King Bed</row>
    <row label="r2">Guest Room, 2 Queen Beds</row>
    <row label="r3">Suite, 1 King Bed</row></define>
  <define label="att_tCBC6_list">
    <row label="r1">Hotel located a <u>5 to 10 minute walk</u> from key destinations, attractions and dining options</row>
    <row label="r2">Hotel located a <u>10 to 15 minute walk</u> from key destinations, attractions and dining options</row>
    <row label="r3">Hotel located <u>more than 15 minute walk</u> from key destinations, attractions and dining options</row></define>
  <loop label="TCBCloop" vars="var1">
    <block label="TCBC">
      <exec>
codes = str(TCBC_Version.val) + "_[loopvar: label]"


for x in range(1,4):
	codeF = codes + "_" + str(x)
	cbciter = tcbcd.get(codeF)
	if cbciter:
		for n in range(1,7):
			punchQ = allQuestions["Att%sc%s_[loopvar: label]" % (str(n),str(x))]
			if int(cbciter["att" + str(n)]) gt 0:
				punchQ.val = punchQ.attr("r" +cbciter["att" + str(n)]).index
      </exec>

      <select 
     label="Att1c1_[loopvar: label]"
     optional="1"
     where="execute,survey,report">
        <title>Attribute 1 for Concept 1</title>
        <insert as="choices" source="att_tCBC1_list"/>
      </select>

      <select 
     label="Att2c1_[loopvar: label]"
     optional="1"
     where="execute,survey,report">
        <title>Attribute 2 for Concept 1</title>
        <insert as="choices" source="att_tCBC2_list"/>
      </select>

      <select 
     label="Att3c1_[loopvar: label]"
     optional="1"
     where="execute,survey,report">
        <title>Attribute 3 for Concept 1</title>
        <insert as="choices" source="att_tCBC3_list"/>
      </select>

      <select 
     label="Att4c1_[loopvar: label]"
     optional="1"
     where="execute,survey,report">
        <title>Attribute 4 for Concept 1</title>
        <insert as="choices" source="att_tCBC4_list"/>
      </select>

      <select 
     label="Att5c1_[loopvar: label]"
     optional="1"
     where="execute,survey,report">
        <title>Attribute 5 for Concept 1</title>
        <insert as="choices" source="att_tCBC5_list"/>
      </select>

      <select 
     label="Att6c1_[loopvar: label]"
     optional="1"
     where="execute,survey,report">
        <title>Attribute 6 for Concept 1</title>
        <insert as="choices" source="att_tCBC6_list"/>
      </select>

      <suspend/>

      <select 
     label="Att1c2_[loopvar: label]"
     optional="1"
     where="execute,survey,report">
        <title>Attribute 1 for Concept 2</title>
        <insert as="choices" source="att_tCBC1_list"/>
      </select>

      <select 
     label="Att2c2_[loopvar: label]"
     optional="1"
     where="execute,survey,report">
        <title>Attribute 2 for Concept 2</title>
        <insert as="choices" source="att_tCBC2_list"/>
      </select>

      <select 
     label="Att3c2_[loopvar: label]"
     optional="1"
     where="execute,survey,report">
        <title>Attribute 3 for Concept 2</title>
        <insert as="choices" source="att_tCBC3_list"/>
      </select>

      <select 
     label="Att4c2_[loopvar: label]"
     optional="1"
     where="execute,survey,report">
        <title>Attribute 4 for Concept 2</title>
        <insert as="choices" source="att_tCBC4_list"/>
      </select>

      <select 
     label="Att5c2_[loopvar: label]"
     optional="1"
     where="execute,survey,report">
        <title>Attribute 5 for Concept 2</title>
        <insert as="choices" source="att_tCBC5_list"/>
      </select>

      <select 
     label="Att6c2_[loopvar: label]"
     optional="1"
     where="execute,survey,report">
        <title>Attribute 6 for Concept 2</title>
        <insert as="choices" source="att_tCBC6_list"/>
      </select>

      <suspend/>

      <select 
     label="Att1c3_[loopvar: label]"
     optional="1"
     where="execute,survey,report">
        <title>Attribute 1 for Concept 3</title>
        <insert as="choices" source="att_tCBC1_list"/>
      </select>

      <select 
     label="Att2c3_[loopvar: label]"
     optional="1"
     where="execute,survey,report">
        <title>Attribute 2 for Concept 3</title>
        <insert as="choices" source="att_tCBC2_list"/>
      </select>

      <select 
     label="Att3c3_[loopvar: label]"
     optional="1"
     where="execute,survey,report">
        <title>Attribute 3 for Concept 3</title>
        <insert as="choices" source="att_tCBC3_list"/>
      </select>

      <select 
     label="Att4c3_[loopvar: label]"
     optional="1"
     where="execute,survey,report">
        <title>Attribute 4 for Concept 3</title>
        <insert as="choices" source="att_tCBC4_list"/>
      </select>

      <select 
     label="Att5c3_[loopvar: label]"
     optional="1"
     where="execute,survey,report">
        <title>Attribute 5 for Concept 3</title>
        <insert as="choices" source="att_tCBC5_list"/>
      </select>

      <select 
     label="Att6c3_[loopvar: label]"
     optional="1"
     where="execute,survey,report">
        <title>Attribute 6 for Concept 3</title>
        <insert as="choices" source="att_tCBC6_list"/>
      </select>

      <suspend/>

      <radio 
     label="TCBCD_[loopvar: label]"
     fir="off"
     surveyDisplay="desktop">
        <title>CBC Demo</title>
        <comment>Select one</comment>
        <row label="ra1" optional="1" where="notdp">Genre</row>
        <row label="ra6" optional="1" where="notdp">Additional cosmetic items</row>
        <row label="ra2" optional="1" where="notdp">Additional story content</row>
        <row label="ra4" optional="1" where="notdp">Additional characters</row>
        <row label="ra5" optional="1" where="notdp">Additional in-game items</row>
        <row label="r1" ss:rowClassNames="lastrow inputrow"/>
        <style name="question.left"/>
        <style name="question.left-blank-legend"/>
        <style name="question.element" rows="r1"><![CDATA[
\@if ec.simpleList
<div class="element $(rowStyle) $(levels) $(extraClasses) ${col.group.styles.ss.groupClassNames if col.group else (row.group.styles.ss.groupClassNames if row.group else "")} $(col.styles.ss.colClassNames) $(row.styles.ss.rowClassNames) ${"clickableCell" if isClickable else ""}"$(extra)>
    ${v2_insertStyle('el.label.start')}
    $(text)
    ${v2_insertStyle('el.label.end')}
<div class="input_label">GET STARTED</div><div class="selected_image show_when_selected"></div>
</div>
\@else
<$(tag) $(headers) class="cell nonempty element $(levels) ${"desktop" if this.grouping.cols else "mobile"} border-collapse $(extraClasses) ${col.group.styles.ss.groupClassNames if col.group else (row.group.styles.ss.groupClassNames if row.group else "")} $(col.styles.ss.colClassNames) $(row.styles.ss.rowClassNames) ${"clickableCell" if isClickable else ""}"$(extra)>
    ${v2_insertStyle('el.label.start')}
    $(text)
    ${v2_insertStyle('el.label.end')}
<div class="input_label">GET STARTED</div><div class="selected_image show_when_selected"></div>
</$(tag)>
\@endif
]]></style>
        <style cols="c1" name="question.element" rows="ra1,ra2,ra4,ra5,ra6,ra7,ra8,ra9,ra10,ra11,ra12"><![CDATA[
\@if ec.simpleList
<div class="element $(rowStyle) $(levels) $(extraClasses) ${col.group.styles.ss.groupClassNames if col.group else (row.group.styles.ss.groupClassNames if row.group else "")} $(col.styles.ss.colClassNames) $(row.styles.ss.rowClassNames) ${"clickableCell" if isClickable else ""}"$(extra)>
${Att1c1_[loopvar: label].selected.text if ec.row.label=="ra1" else ""}
${res.loctab %(Att6c1_[loopvar: label].selected.text) if ec.row.label=="ra6" else ""}
${res.ticktab %(Att2c1_[loopvar: label].selected.text) if ec.row.label=="ra2" else ""}
${res.ticktab %(Att4c1_[loopvar: label].selected.text) if ec.row.label=="ra4" else ""}
${res.ticktab %(Att5c1_[loopvar: label].selected.text) if ec.row.label=="ra5" else ""}


</div>
\@else
<$(tag) $(headers) class="cell nonempty element $(levels) ${"desktop" if this.grouping.cols else "mobile"} border-collapse $(extraClasses) ${col.group.styles.ss.groupClassNames if col.group else (row.group.styles.ss.groupClassNames if row.group else "")} $(col.styles.ss.colClassNames) $(row.styles.ss.rowClassNames) ${"clickableCell" if isClickable else ""}"$(extra)>
${Att1c1_[loopvar: label].selected.text if ec.row.label=="ra1" else ""}
${res.loctab %(Att6c1_[loopvar: label].selected.text) if ec.row.label=="ra6" else ""}
${res.ticktab %(Att2c1_[loopvar: label].selected.text) if ec.row.label=="ra2" else ""}
${res.ticktab %(Att4c1_[loopvar: label].selected.text) if ec.row.label=="ra4" else ""}
${res.ticktab %(Att5c1_[loopvar: label].selected.text) if ec.row.label=="ra5" else ""}



</$(tag)>
\@endif
]]></style>
        <style cols="c2" name="question.element" rows="ra1,ra2,ra4,ra5,ra6,ra7,ra8,ra9,ra10,ra11,ra12"><![CDATA[
\@if ec.simpleList
<div class="element $(rowStyle) $(levels) $(extraClasses) ${col.group.styles.ss.groupClassNames if col.group else (row.group.styles.ss.groupClassNames if row.group else "")} $(col.styles.ss.colClassNames) $(row.styles.ss.rowClassNames) ${"clickableCell" if isClickable else ""}"$(extra)>
${Att1c2_[loopvar: label].selected.text if ec.row.label=="ra1" else ""}
${res.loctab %(Att6c2_[loopvar: label].selected.text) if ec.row.label=="ra6" else ""}
${res.ticktab %(Att2c2_[loopvar: label].selected.text) if ec.row.label=="ra2" else ""}
${res.ticktab %(Att4c2_[loopvar: label].selected.text) if ec.row.label=="ra4" else ""}
${res.ticktab %(Att5c2_[loopvar: label].selected.text) if ec.row.label=="ra5" else ""}


</div>
\@else
<$(tag) $(headers) class="cell nonempty element $(levels) ${"desktop" if this.grouping.cols else "mobile"} border-collapse $(extraClasses) ${col.group.styles.ss.groupClassNames if col.group else (row.group.styles.ss.groupClassNames if row.group else "")} $(col.styles.ss.colClassNames) $(row.styles.ss.rowClassNames) ${"clickableCell" if isClickable else ""}"$(extra)>
${Att1c2_[loopvar: label].selected.text if ec.row.label=="ra1" else ""}
${res.loctab %(Att6c2_[loopvar: label].selected.text) if ec.row.label=="ra6" else ""}
${res.ticktab %(Att2c2_[loopvar: label].selected.text) if ec.row.label=="ra2" else ""}
${res.ticktab %(Att4c2_[loopvar: label].selected.text) if ec.row.label=="ra4" else ""}
${res.ticktab %(Att5c2_[loopvar: label].selected.text) if ec.row.label=="ra5" else ""}



</$(tag)>
\@endif
]]></style>
        <style cols="c3" name="question.element" rows="ra1,ra2,ra4,ra5,ra6,ra7,ra8,ra9,ra10,ra11,ra12"><![CDATA[
\@if ec.simpleList
<div class="element $(rowStyle) $(levels) $(extraClasses) ${col.group.styles.ss.groupClassNames if col.group else (row.group.styles.ss.groupClassNames if row.group else "")} $(col.styles.ss.colClassNames) $(row.styles.ss.rowClassNames) ${"clickableCell" if isClickable else ""}"$(extra)>
${Att1c3_[loopvar: label].selected.text if ec.row.label=="ra1" else ""}
${res.loctab %(Att6c3_[loopvar: label].selected.text) if ec.row.label=="ra6" else ""}
${res.ticktab %(Att2c3_[loopvar: label].selected.text) if ec.row.label=="ra2" else ""}
${res.ticktab %(Att4c3_[loopvar: label].selected.text) if ec.row.label=="ra4" else ""}
${res.ticktab %(Att5c3_[loopvar: label].selected.text) if ec.row.label=="ra5" else ""}


</div>
\@else
<$(tag) $(headers) class="cell nonempty element $(levels) ${"desktop" if this.grouping.cols else "mobile"} border-collapse $(extraClasses) ${col.group.styles.ss.groupClassNames if col.group else (row.group.styles.ss.groupClassNames if row.group else "")} $(col.styles.ss.colClassNames) $(row.styles.ss.rowClassNames) ${"clickableCell" if isClickable else ""}"$(extra)>
${Att1c3_[loopvar: label].selected.text if ec.row.label=="ra1" else ""}
${res.loctab %(Att6c3_[loopvar: label].selected.text) if ec.row.label=="ra6" else ""}
${res.ticktab %(Att2c3_[loopvar: label].selected.text) if ec.row.label=="ra2" else ""}
${res.ticktab %(Att4c3_[loopvar: label].selected.text) if ec.row.label=="ra4" else ""}
${res.ticktab %(Att5c3_[loopvar: label].selected.text) if ec.row.label=="ra5" else ""}



</$(tag)>
\@endif
]]></style>
        <style name="question.after"><![CDATA[
<style>
table.grid.grid-table-mode{
border-collapse: separate;
border-spacing: 20px 0px;
}
th.col-legend{
border-bottom: none !important;
background-color: rgb(255, 165, 6);
text-transform: uppercase;
color: #fff;
font-weight: bold;
}

td.element{
border-bottom: none !important;
border-top: none !important;
}
td.element.lastrow{
border-bottom: 1px solid #ccc !important;
}
.pricebig{
font-size: 40px;
}
.iconcell{
width: 15%;
}

.textcell{
width: 85%;
}

.icontables{
padding: 5px;
width: 100%;
text-align: left;
}


td.element.inputrow{
background: rgb(255, 165, 6) !important;
height: 30px !important;
vertical-align: middle;
}

td.element.inputrow.cellchecked .input_label, td.element.inputrow .selected_image, .lastrow input.radio{
display: none;
}

td.element.inputrow .input_label{
display: flex;
align-items: center;
justify-content: center;
font-size: 15px;
color:#fff;
font-weight: bold;
text-align: center;
}


td.element.inputrow.cellchecked .selected_image{
display: block;
height: 80%;
width: 80%;
margin-left: auto;
margin-right: auto;
background-repeat: no-repeat;
background-position: center;
background-size: contain;
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='1395.32 536.393 28.287 21.213'%3E%3Cdefs%3E%3Cstyle%3E .cls-1 %7B fill: %23fff; %7D %3C/style%3E%3C/defs%3E%3Cg id='Best_icon' data-name='Best icon' transform='translate%28-130 2%29'%3E%3Crect id='Rectangle_6' data-name='Rectangle 6' class='cls-1' width='6' height='24' transform='translate%281549.364 534.393%29 rotate%2845%29'/%3E%3Crect id='Rectangle_7' data-name='Rectangle 7' class='cls-1' width='6' height='16' transform='translate%281540.876 551.364%29 rotate%28135%29'/%3E%3C/g%3E%3C/svg%3E%0A");
font-size: 15px;
color:#fff;
font-weight: bold;
text-align: center;
}

.cell-sub-wrapper{
display: none !important;
}
</style>
<script>
jQuery(document).ready(function(){

jQuery("#btn_continue, #btn_finish").hide();



jQuery(".td.element.inputrow").each(function(){
	if(jQuery(this).find('input[type="radio"]').first().attr("checked")){
    	jQuery(this).addClass('cellchecked');
    	jQuery("#btn_continue, #btn_finish").show();
    }else{
        jQuery(this).removeClass('cellchecked');
            
    }
});


    // sync the input state
jQuery("td.element.inputrow.clickableCell").on("click", function(e){
	e.preventDefault();
	e.stopPropagation();
	jQuery(this).parents(".answers").find("td.element").removeClass('cellchecked');
    jQuery(this).addClass('cellchecked');
    var jQueryradio = jQuery(this).find('input[type="radio"]');
    if (jQueryradio.prop("checked")){
    jQueryradio.prop("checked",false);
    jQuery(this).removeClass('cellchecked');
    jQuery("#btn_continue, #btn_finish").hide();
        }
    else{
    jQueryradio.prop("checked",true);
    jQuery("#btn_continue, #btn_finish").show();
    
    }
});

});

</script>
]]></style>
        <col label="c1" value="1">[pipe: Att3c1_[loopvar: label]]</col>
        <col label="c2" value="2">[pipe: Att3c2_[loopvar: label]]</col>
        <col label="c3" value="3">[pipe: Att3c3_[loopvar: label]]</col>
      </radio>
    </block>

    <looprow label="1">
      <loopvar name="var1">1</loopvar>
    </looprow>

    <looprow label="2">
      <loopvar name="var1">2</loopvar>
    </looprow>

    <looprow label="3">
      <loopvar name="var1">3</loopvar>
    </looprow>

    <looprow label="4">
      <loopvar name="var1">4</loopvar>
    </looprow>

    <looprow label="5">
      <loopvar name="var1">5</loopvar>
    </looprow>

    <looprow label="6">
      <loopvar name="var1">6</loopvar>
    </looprow>
  </loop>

  <suspend/>