from . import models
from ._builtin import Page, WaitPage
from otree.api import Currency as c, currency_range
from .models import Constants
from django.conf import settings
import time
import random
class start(Page):
def is_displayed(self):
return self.round_number == 1
def before_next_page(self):
self.participant.vars['expiry_timestamp'] = time.time() + self.player.task_timer
def vars_for_template(self):
self.player.choose_task_2 = self.participant.vars['choose_task_2']
self.player.task_timer = self.session.config['task_timer']
return {
'debug': settings.DEBUG,
}
class task(Page):
form_model = models.Player
form_fields = ['user_total']
def get_timeout_seconds(self):
return self.participant.vars['expiry_timestamp'] - time.time()
def is_displayed(self):
return self.participant.vars['expiry_timestamp'] - time.time() > 3
def vars_for_template(self):
self.player.task_timer = self.session.config['task_timer']
self.player.additional_tokens = self.session.config['additional_tokens']
self.player.additional_tokens_calculation = self.session.config['additional_tokens_calculation']
self.player.additional_token_reduction = self.session.config['additional_token_reduction']
self.player.int1 = Constants.INTS_T1[self.round_number - 1][0]
self.player.int2 = Constants.INTS_T1[self.round_number - 1][1]
self.player.solution = self.player.int1 + self.player.int2
total_payoff = 0
for p in self.player.in_all_rounds():
if p.payoff_score != None:
total_payoff += p.payoff_score
if self.round_number == 1:
correct_last_round = "
"
else:
if self.player.in_previous_rounds()[-1].is_correct:
correct_last_round = "Your last sum was correct"
else:
correct_last_round = "Your last sum was incorrect"
if self.participant.vars['choose_task_2']==1:
self.player.correct_answers = total_payoff/self.session.config['amount_tokens']
else:
self.player.correct_answers = total_payoff/self.session.config['amount_tokens_higher']
return {
'total_payoff': self.player.correct_answers,
'round_count':(self.round_number - 1),
'debug': settings.DEBUG,
'correct_last_round': correct_last_round,
}
def before_next_page(self):
if self.participant.vars['choose_task_2']==1:
self.player.score_round()
else:
self.player.score_round_experimenter()
class Results(Page):
form_model = models.Player
form_fields = ['belief']
def is_displayed(self):
return self.round_number == Constants.num_rounds
def vars_for_template(self):
self.player.additional_tokens = self.session.config['additional_tokens']
self.player.additional_tokens_calculation = self.session.config['additional_tokens_calculation']
self.player.additional_token_reduction = self.session.config['additional_token_reduction']
total_payoff = 0
for p in self.player.in_all_rounds():
if p.payoff_score != None:
total_payoff += p.payoff_score
self.participant.vars['task_B_score'] = total_payoff
if self.participant.vars['choose_task_2']==1:
self.player.correct_answers = round(total_payoff/self.session.config['amount_tokens'])
else:
self.player.correct_answers = round(total_payoff/self.session.config['amount_tokens_higher'])
def before_next_page(self):
self.participant.vars['task_B_belief'] = self.player.belief
class beliefs1(Page):
form_model = models.Player
form_fields = ['choose_reason']
def is_displayed(self):
return self.round_number == Constants.num_rounds
def before_next_page(self):
self.player.choose_task_2 = self.participant.vars['choose_task_2']
class beliefs2(Page):
form_model = models.Player
form_fields = ['gender_higher_token','degree_level_higher_token','degree_higher_token']
def is_displayed(self):
return self.round_number == Constants.num_rounds
def before_next_page(self):
self.player.choose_task_2 = self.participant.vars['choose_task_2']
def app_after_this_page(self, upcoming_apps):
if self.participant.vars['frame_treat'] == 'No frame':
return upcoming_apps[-2]
else:
return upcoming_apps[-1]
page_sequence = [
start,
task,
Results,
beliefs1,
beliefs2
]