from otree.api import Currency as c, currency_range from ._builtin import Page, WaitPage from .models import Constants import time from django.utils import timezone from datetime import datetime import json def vars_for_all_templates(self): return { 'num_round':self.subsession.round_number - 1, 'num_of_round': Constants.num_rounds - 1, } class Welcome (Page): def is_displayed(self): return self.round_number == 1 class Practiceround_instruction(Page): def is_displayed(self): return self.round_number == 1 class Practiceround_summary (Page): def is_displayed(self): return self.round_number == 1 class Ready_to_start(Page): pass class before_Choice1(WaitPage): pass class Choice1(Page): form_model = 'player' form_fields = ['period1_choice'] timer_text = 'Time left to complete this period:' timeout_seconds = 10 class Waitforperiod1(WaitPage): def after_all_players_arrive(self): self.group.set_payoffs() class Choice2(Page): def is_displayed(self): if self.player.period1_end: return False else: return True form_model = 'player' form_fields = ['period2_choice'] timer_text = 'Time left to complete this period:' timeout_seconds = 10 class Waitforperiod2(WaitPage): def after_all_players_arrive(self): self.group.set_payoffs() for p in self.group.get_players(): p.period3_seconds = time.time() + 10.00 class Choice3(Page): def vars_for_template(self): return {'remaining_timeout_seconds': self.player.period3_seconds - time.time()} def is_displayed (self): if self.player.period1_end or self.player.period2_end: return False else: return True form_model = 'player' form_fields =['period3_choice'] class Waitforperiod3(WaitPage): pass class ResultsWaitPage(WaitPage): def after_all_players_arrive(self): return self.group.set_payoffs() class Results(Page): pass class Part1_end(Page): def is_displayed(self): return self.round_number == Constants.num_rounds class Lossaversion_instruction(Page): def is_displayed(self): return self.round_number == Constants.num_rounds class Lossaversion_game(Page): def is_displayed(self): return self.round_number == Constants.num_rounds form_model = 'player' form_fields = ['LTchoice1', 'LTchoice2', 'LTchoice3', 'LTchoice4', 'LTchoice5', 'LTchoice6'] def error_message(self, values): #print(values['LTchoice1']) if values['LTchoice1'] == 'Reject' and (values['LTchoice2'] == 'Accept' or values['LTchoice3']=='Accept' or values['LTchoice4']=='Accept' or values['LTchoice5']=='Accept'or values['LTchoice6']=='Accept'): return 'Since you reject Lottery 1, you cannot accept the latter lottery. Please refer notice 2.' if values['LTchoice2']=='Reject' and (values['LTchoice3']=='Accept' or values['LTchoice4']=='Accept' or values['LTchoice5']=='Accept'or values['LTchoice6']=='Accept'): return 'Since you reject Lottery 2, you cannot accept the latter lottery. Please refer notice 2.' if values['LTchoice3']== 'Reject' and (values['LTchoice4']=='Accept' or values['LTchoice5']=='Accept'or values['LTchoice6']=='Accept'): return 'Since you reject Lottery 3, you cannot accept the latter lottery. Please refer notice 2.' if values['LTchoice4']=='Reject' and (values['LTchoice5']=='Accept'or values['LTchoice6']=='Accept'): return 'Since you reject Lottery 4, you cannot accept the latter lottery. Please refer notice 2.' if values['LTchoice5']=='Reject' and values['LTchoice6']=='Accept': return 'Since you reject Lottery 5, you cannot accept the latter lottery. Please refer notice 2.' def before_next_page(self): pass class Demographic (Page): def is_displayed(self): return self.round_number == Constants.num_rounds form_model = 'player' form_fields = ['age', 'gender', 'citizenship', 'major', 'year', 'risk'] class Comment(Page): def is_displayed(self): return self.round_number == Constants.num_rounds form_model = 'player' form_fields = ['decision', 'comments'] class ResultsSummary (Page): def is_displayed(self): return self.round_number == Constants.num_rounds def vars_for_template(self): return { 'paying_round': self.session.vars['paying_round'], 'paying_round_shown': self.session.vars['paying_round']-1, 'part1_payoff': self.player.in_round(self.session.vars['paying_round']).payoff, 'part1_currency_payoff':self.player.in_round(self.session.vars['paying_round']).payoff.to_real_world_currency(self.session), 'lossaversionchosen':self.session.vars['lossaversionchosen'], } page_sequence = [ Welcome, Practiceround_instruction, Ready_to_start, before_Choice1, Choice1, Waitforperiod1, Choice2, Waitforperiod2, Choice3, Waitforperiod3, ResultsWaitPage, Results, Part1_end, Practiceround_summary, Lossaversion_instruction, Lossaversion_game, Demographic, Comment, ResultsSummary ]