from otree.api import Currency as c, currency_range from ._builtin import Page, WaitPage from .models import Constants from django.views.decorators.csrf import csrf_exempt from django.utils.decorators import method_decorator import numpy as np import time def vars_for_all_templates(self): num_rounds = Constants.num_rounds unit = 1 return { 'radio_amounts': zip(Constants.list2, Constants.list1), 'fee': c(self.session.config['participation_fee']), 'pages': self.participant.vars['pages_num'], 'fixed_payment_per_question': c(self.session.config['fixed_payment_per_question']), 'continue': self.participant.vars['continue'], 'fixed': c(self.participant.vars['rp']), 'payment': c(self.participant.vars['credited']), 'slide_task_payment': c(Constants.slide_task_payment), 'slide_task_payment2': c(Constants.slide_task_payment * 2) } @method_decorator(csrf_exempt, name='dispatch') class TaskIntro(Page): def is_displayed(self): return self.round_number == 1 def before_next_page(self): self.player.rp = self.participant.vars['rp'] class InstructionsPart1(Page): def is_displayed(self): return self.player.round_number == 1 class InstructionsPart2(Page): def is_displayed(self): return self.player.round_number == 1 class Think(Page): def is_displayed(self): return self.player.round_number == 1 class SlidersIntro(Page): def is_displayed(self): return self.player.round_number == 1 class SlidersTask(Page): form_model = 'player' form_fields = ['continue_work', 'work_completed'] def js_vars(self): return dict( work_amount=self.player.work_completed, payment=self.participant.vars['credited'], fee = Constants.slide_task_payment, pages = self.participant.vars['pages_num'] ) def is_displayed(self): return self.participant.vars['continue'] def before_next_page(self): self.participant.vars['pages_num'] += self.player.work_completed self.player.task_num = self.participant.vars['pages_num'] self.participant.vars['continue'] = self.player.continue_work self.participant.vars['credited'] = self.participant.vars['pages_num']*Constants.slide_task_payment*2 class ValuationAnchor(Page): form_model = 'player' form_fields = ['confidence_anchor'] def is_displayed(self): return self.round_number == Constants.num_rounds def js_vars(self): return dict( pages=self.participant.vars['pages_num'] ) def before_next_page(self): self.player.confidence_anchor = 100 - 5 * (20 - self.player.confidence_anchor) self.participant.vars['confidence_anchor'] = self.player.confidence_anchor self.player.set_payoff() self.player.confidence_noanchor = self.participant.vars['confidence_noanchor'] self.player.rp = self.participant.vars['rp'] self.player.task_num = self.participant.vars['pages_num'] class ValuationNoAnchor(Page): form_model = 'player' form_fields = ['confidence_noanchor'] def is_displayed(self): return self.round_number == 1 def before_next_page(self): self.player.confidence_noanchor = 100 - 5 * (20 - self.player.confidence_noanchor) self.participant.vars['confidence_noanchor'] = self.player.confidence_noanchor page_sequence = [ TaskIntro, SlidersIntro, Think, ValuationNoAnchor, InstructionsPart2, SlidersTask, ValuationAnchor ]