from otree.api import Currency as c, currency_range from ._builtin import Page, WaitPage from .models import Constants, Decision from django.forms import modelformset_factory import random DecisionFormSet = modelformset_factory(Decision, fields=('answer_task0',), extra=0) DecisionFormSet2 = modelformset_factory(Decision, fields=('answer_task1',), extra=0) DecisionFormSet3 = modelformset_factory(Decision, fields=('answer_task2',), extra=0) DecisionFormSet4 = modelformset_factory(Decision, fields=('answer_task3',), extra=0) class Introduction(Page): pass class begin1(Page): pass class game1_inst(Page): pass class game1_task0_intro(Page): pass class game1_task0(Page): timeout_seconds = 30 def vars_for_template(self): # get decisions for this player decision_qs = Decision.objects.filter(player__exact=self.player) assert len(decision_qs) == Constants.num_ques_task0 decisions_formset = DecisionFormSet(queryset=decision_qs) return { 'decision_formset': decisions_formset, 'num_and_forms': zip(Constants.num1_task0, Constants.num2_task0, Constants.num3_task0, Constants.num4_task0, Constants.num5_task0, Constants.num6_task0, Constants.num7_task0, Constants.num8_task0, Constants.num9_task0, Constants.num10_task0, Constants.num11_task0, Constants.num12_task0, Constants.num13_task0, Constants.num14_task0, Constants.num15_task0, Constants.num16_task0, Constants.num17_task0, Constants.num18_task0, decisions_formset.forms), } def before_next_page(self): submitted_data = self.form.data for i in range(Constants.num_ques_task0): input_prefix = 'form-%d-'%(i) player_answer = submitted_data[input_prefix + 'answer_task0'] if player_answer != '': self.player.task0_correct += (int(player_answer)==Constants.ans_task0[i]) class game1_task1_intro(Page): form_model = 'player' form_fields = ['task1_correct_pred'] class game1_task1(Page): timeout_seconds = 90 def vars_for_template(self): # get decisions for this player decision_qs2 = Decision.objects.filter(player__exact=self.player) assert len(decision_qs2) == Constants.num_ques_task1 decisions_formset2 = DecisionFormSet2(queryset=decision_qs2) return { 'decision_formset': decisions_formset2, 'num_and_forms': zip(Constants.num1_task1, Constants.num2_task1, Constants.num3_task1, Constants.num4_task1, Constants.num5_task1, Constants.num6_task1, Constants.num7_task1, Constants.num8_task1, Constants.num9_task1, Constants.num10_task1, Constants.num11_task1, Constants.num12_task1, Constants.num13_task1, Constants.num14_task1, Constants.num15_task1, Constants.num16_task1, Constants.num17_task1, Constants.num18_task1, decisions_formset2.forms), } def before_next_page(self): submitted_data = self.form.data for i in range(Constants.num_ques_task1): input_prefix = 'form-%d-'%(i) player_answer = submitted_data[input_prefix + 'answer_task1'] if player_answer != '': self.player.task1_correct += (int(player_answer)==Constants.ans_task1[i]) print("Correctly Answered Task 1: ", self.player.task1_correct) class game1_task2_intro(Page): form_model = 'player' form_fields = ['task2_correct_pred'] class game1_task2(Page): timeout_seconds = 90 def vars_for_template(self): # get decisions for this player decision_qs3 = Decision.objects.filter(player__exact=self.player) assert len(decision_qs3) == Constants.num_ques_task2 decisions_formset3 = DecisionFormSet3(queryset=decision_qs3) return { 'decision_formset': decisions_formset3, 'num_and_forms': zip(Constants.num1_task2, Constants.num2_task2, Constants.num3_task2, Constants.num4_task2, Constants.num5_task2, Constants.num6_task2, Constants.num7_task2, Constants.num8_task2, Constants.num9_task2, Constants.num10_task2, Constants.num11_task2, Constants.num12_task2, Constants.num13_task2, Constants.num14_task2, Constants.num15_task2, Constants.num16_task2, Constants.num17_task2, Constants.num18_task2, decisions_formset3.forms), } def before_next_page(self): submitted_data = self.form.data for i in range(Constants.num_ques_task2): input_prefix = 'form-%d-'%(i) player_answer = submitted_data[input_prefix + 'answer_task2'] if player_answer != '': self.player.task2_correct += (int(player_answer)==Constants.ans_task2[i]) print("Correctly Answered Task 2: ", self.player.task2_correct) class game1_post_task2(Page): form_model = 'player' form_fields = ['task2_rank_pred','task2_top_chance'] class game1_task3_intro(Page): form_model = 'player' form_fields = ['task3_choice', 'task3_correct_pred'] class game1_task3(Page): timeout_seconds = 90 def vars_for_template(self): # get decisions for this player decision_qs4 = Decision.objects.filter(player__exact=self.player) assert len(decision_qs4) == Constants.num_ques_task2 decisions_formset4 = DecisionFormSet4(queryset=decision_qs4) return { 'decision_formset': decisions_formset4, 'num_and_forms': zip(Constants.num1_task3, Constants.num2_task3, Constants.num3_task3, Constants.num4_task3, Constants.num5_task3, Constants.num6_task3, Constants.num7_task3, Constants.num8_task3, Constants.num9_task3, Constants.num10_task3, Constants.num11_task3, Constants.num12_task3, Constants.num13_task3, Constants.num14_task3, Constants.num15_task3, Constants.num16_task3, Constants.num17_task3, Constants.num18_task3, decisions_formset4.forms), } def before_next_page(self): submitted_data = self.form.data for i in range(Constants.num_ques_task2): input_prefix = 'form-%d-'%(i) player_answer = submitted_data[input_prefix + 'answer_task3'] if player_answer != '': self.player.task3_correct += (int(player_answer)==Constants.ans_task3[i]) print("Correctly Answered Task 3: ", self.player.task3_correct) class game1_post_task3(Page): form_model = 'player' form_fields = ['task3_rank_pred','task3_top_chance'] #class game1_task4_intro(Page): #form_model = 'player' #form_fields = ['task4_choice'] #class game1_post_task4(Page): #form_model = 'player' #form_fields = ['task4_rank_pred','task4_top_chance'] class ResultsWaitPage(WaitPage): wait_for_all_groups = True def after_all_players_arrive(self): for group in self.subsession.get_groups(): group.set_payoffs() self.subsession.get_treat1() class wait0(WaitPage): wait_for_all_groups = True class wait1(WaitPage): wait_for_all_groups = True class wait2(WaitPage): wait_for_all_groups = True class wait3(WaitPage): wait_for_all_groups = True page_sequence = [ Introduction, begin1, game1_inst, game1_task0_intro, wait0, game1_task0, game1_task1_intro, wait1, game1_task1, game1_task2_intro, wait2, game1_task2, game1_post_task2, game1_task3_intro, wait3, game1_task3, game1_post_task3, #game1_task4_intro, #game1_post_task4, ResultsWaitPage]