from . import models from ._builtin import Page, WaitPage from .functions import slider, default from otree.api import Currency as c, currency_range, widgets from .models import Constants from otreeutils.surveys import SurveyPage, setup_survey_pages import random class SliderPrimaryDiscrete(Page): form_model = models.Player form_fields = ['slider1', 'slider2', 'slider3', 'slider4', 'slider5', 'slider6', ] def vars_for_template(self): return {'slider_items': [1, 2, 3, 4, 5, 6]} def before_next_page(self): chosen_values = { 'item1': self.player.slider1, 'item2': self.player.slider2, 'item3': self.player.slider3, 'item4': self.player.slider4, 'item5': self.player.slider5, 'item6': self.player.slider6 } mean_allocations = slider.mean_allocations_discrete(chosen_values) svo_slider_angle = slider.svo_angle(mean_allocations['self'], mean_allocations['other']) self.player.slider_angle = svo_slider_angle self.player.participant.vars['slider_angle'] = svo_slider_angle print(self.player.participant.vars['slider_angle']) self.player.slider_classification = slider.svo_classification(svo_slider_angle) class SliderPrimaryContinuous(Page): form_model = models.Player form_fields = ['slider1', 'slider2', 'slider3', 'slider4', 'slider5', 'slider6', ] def vars_for_template(self): return {'slider_items': [1, 2, 3, 4, 5, 6]} def before_next_page(self): chosen_values = { 'item1': self.player.slider1, 'item2': self.player.slider2, 'item3': self.player.slider3, 'item4': self.player.slider4, 'item5': self.player.slider5, 'item6': self.player.slider6 } mean_allocations = slider.mean_allocations_continuous(chosen_values) svo_slider_angle = slider.svo_angle(mean_allocations['self'], mean_allocations['other']) self.player.slider_angle = svo_slider_angle self.player.participant.vars['slider_angle'] = svo_slider_angle self.player.slider_classification = slider.svo_classification(svo_slider_angle) class DebugDisplayPage(Page): def vars_for_template(self): return {'angle': self.player.slider_angle, 'classification_slider': self.player.slider_classification, 'tdm_prosocial': self.player.nine_item_tdm_prosocial, 'tdm_individualistic': self.player.nine_item_tdm_individualistic, 'tdm_competitive': self.player.nine_item_tdm_competitive, 'classification_tdm': self.player.nine_item_tdm_classification} class Training(Page): form_model = models.Player form_fields = ['trainingQuestion1', 'trainingQuestion2'] def before_next_page(self): if self.player.trainingQuestion1 == 27 and self.player.trainingQuestion2 == 2: self.participant.vars['chartTraining'] = True else: self.participant.vars['chartTraining'] = False print(self.participant.vars['chartTraining']) treatments = (['control_live', 'control_static', 'control_none', 'general_live', 'general_static', 'general_none', 'personal_live', 'personal_static', 'personal_none']) if self.participant.vars['treeAttnCheck'] and self.participant.vars['onlineStudyAttnCheck'] and self.participant.vars['chartTraining']: if 'treatment' in self.session.config: self.participant.vars['treatment'] = self.session.config['treatment'] self.player.treatment = self.participant.vars['treatment'] else: self.participant.vars['treatment'] = random.choice(treatments) self.player.treatment = self.participant.vars['treatment'] else: self.participant.vars['treatment'] = 'failed' self.player.treatment = self.participant.vars['treatment'] print('in else') if self.player.treatment.startswith('control'): self.player.default_from_treatment = 0 elif self.player.treatment.startswith('general'): self.player.default_from_treatment = 0.30 elif self.player.treatment.startswith('personal'): if self.player.slider_angle >= 22.45: self.player.default_from_treatment = 0.50 elif self.player.slider_angle < 22.45: self.player.default_from_treatment = 0.10 elif self.player.treatment.startswith('failed'): self.player.default_from_treatment = -1 print(self.participant.vars['treatment']) print(self.player.default_from_treatment) def app_after_this_page(self, upcoming_apps): player = self.player print('in app after this page') print(player.participant.vars['treatment']) if player.participant.vars['treatment'] == 'control_live' or player.participant.vars['treatment'] == 'control_static' or player.participant.vars['treatment'] == 'control_none': return 'donation_control' elif player.participant.vars['treatment'] == 'general_live' or player.participant.vars['treatment'] == 'general_static' or player.participant.vars['treatment'] == 'general_none': return 'donation_medium' elif player.participant.vars['treatment'] == 'personal_live' or player.participant.vars['treatment'] == 'personal_static' or player.participant.vars['treatment'] == 'personal_none': if player.participant.vars['slider_angle'] >= 22.45: return 'donation_high' if player.participant.vars['slider_angle'] < 22.45: return 'donation_low' else: return 'conclusion' page_sequence = [SliderPrimaryDiscrete, Training]