from otree.api import Currency as c, currency_range from . import models from ._builtin import Page, WaitPage from .models import Constants import random class WelcomePage(Page): form_model = models.Player form_fields = ['room_group', 'student_group'] def is_displayed(self): if self.subsession.round_number == 1: me = self.player.in_all_rounds() for i in me: i.room_group = self.player.in_round(1).room_group return self.subsession.round_number == 1 class SimpleWaitPage(WaitPage): pass class ResultsWaitPage(WaitPage): def after_all_players_arrive(self): self.group.set_payoffs() class LotteryPage(Page): form_model = models.Player def get_form_fields(self): if self.subsession.round_number == 1 or self.subsession.round_number == 6 or self.subsession.round_number == 7: return ['decision_binary'] else: return ['decision_ternary'] def vars_for_template(self): return { 'player_in_all_rounds': self.player.in_previous_rounds(), 'current_round': self.subsession.round_number, 'current_rnd_gen': self.subsession.random_outcome, 'you_now': self.player, 'lottery_template': Constants.lotteries_array[self.subsession.round_number-1], } class Results(Page): def vars_for_template(self): if self.subsession.round_number == 1 or self.subsession.round_number == 6 or self.subsession.round_number == 7: result = self.player.decision_binary else: result = self.player.decision_ternary return { 'player_in_all_rounds': self.player.in_previous_rounds(), 'current_round': self.subsession.round_number, 'current_rnd_gen': self.subsession.random_outcome, 'decision': result, 'curr_payoff': self.player.current_payoff } class AdvertisementPage(Page): timeout_seconds = 45 def vars_for_template(self): p = self.player p.risky_ad = False p.determ_ad = False p.consum_ad = False p.determophob_ad = False p.text_ad = False p.visual_ad = False p.any_ad = False if self.round_number == 6: if p.in_round(1).student_group == '401': p.risky_ad = True p.visual_ad = True p.any_ad = True elif p.in_round(1).student_group == '402': p.determ_ad = True p.visual_ad = True p.any_ad = True else: p.determ_ad = bool(random.getrandbits(1)) p.risky_ad = not p.determ_ad p.visual_ad = True p.any_ad = True elif self.round_number == 7: p.determ_ad = not p.in_round(6).determ_ad p.risky_ad = not p.in_round(6).risky_ad p.text_ad = True p.any_ad = True elif self.round_number == 8: if p.in_round(1).student_group == '403': p.consum_ad = True p.visual_ad = True p.any_ad = True elif p.in_round(1).student_group == '404': p.determ_ad = True p.visual_ad = True p.any_ad = True else: p.consum_ad = bool(random.getrandbits(1)) p.risky_ad = not p.consum_ad p.visual_ad = True p.any_ad = True elif self.round_number == 9: if p.in_round(1).student_group == '401': p.determ_ad = True p.visual_ad = True p.any_ad = True elif p.in_round(1).student_group == '402': p.risky_ad = True p.visual_ad = True p.any_ad = True else: p.determ_ad = bool(random.getrandbits(1)) p.risky_ad = not p.determ_ad p.visual_ad = True p.any_ad = True elif self.round_number == 10: if p.in_round(1).student_group == '403': p.risky_ad = True p.visual_ad = True p.any_ad = True elif p.in_round(1).student_group == '404': p.consum_ad = True p.visual_ad = True p.any_ad = True else: p.risky_ad = bool(random.getrandbits(1)) p.consum_ad = not p.risky_ad p.visual_ad = True p.any_ad = True elif self.round_number == 11: p.determophob_ad = True p.visual_ad = True p.any_ad = True return { 'player_in_all_rounds': self.player.in_previous_rounds(), 'current_round': self.subsession.round_number, 'current_rnd_gen': self.subsession.random_outcome, 'stimulate_consumption': self.player.consum_ad, 'stimulate_determination': self.player.determ_ad, 'stimulate_risk': self.player.risky_ad, 'avoid_determination': self.player.determophob_ad, 'room_group': self.player.in_round(1).room_group, 'text_ad': self.player.text_ad, 'visual_ad': self.player.visual_ad } def is_displayed(self): return self.round_number > 5 class TotalResult(Page): def is_displayed(self): return self.subsession.round_number == Constants.num_rounds def vars_for_template(self): round_to_pay = self.session.vars['paying_round'] payoff = self.player.in_round(round_to_pay).current_payoff if payoff == 3: winner_template = 'Вы выиграли целых ТРИ значка!!!' elif payoff == 2: winner_template = 'Вы выиграли ДВА значка!' elif payoff == 1: winner_template = 'Вам достался памятный значок!' else: winner_template = 'Вам, к сожалению, не повезло, и Вы остались без выигрыша...' return { 'player_in_all_rounds': self.player.in_all_rounds(), 'current_round': self.subsession.round_number, 'current_rnd_gen': self.subsession.random_outcome, 'paying_round': self.session.vars['paying_round'], 'you_now': self.player, 'you_first': self.player.in_round(1), 'prize_template': winner_template } page_sequence = [ WelcomePage, SimpleWaitPage, AdvertisementPage, LotteryPage, ResultsWaitPage, Results, TotalResult ]