from ._builtin import Page, WaitPage from otree.api import Currency as c, currency_range from .models import Constants # TODO: Is displayed no debe depender de timeouts class Introduction(Page): """Description of the game: How to play and returns expected""" timeout_seconds = Constants.timer group_by_arrival_time = True def before_next_page(self): if self.timeout_happened: self.session.vars['game_timeout'] += 1 self.group.game_timeout = self.session.vars['game_timeout'] self.player.game_timeout += 1 self.player.player_timeout += 1 self.participant.vars['player_timeout'] += 1 self.session.vars['round_timeout'] = self.round_number def is_displayed(self): if self.participant.vars['is_mobile'] is False: return True else: return False def vars_for_template(self): language = self.session.config['language'] return dict(language=language) class Contribute(Page): """Player: Choose how much to contribute""" timeout_seconds = Constants.timer form_model = 'player' form_fields = ['contribution', 'contrib_pl'] def before_next_page(self): if self.timeout_happened: self.session.vars['game_timeout'] += 1 self.group.game_timeout = self.session.vars['game_timeout'] self.player.player_timeout += 1 self.session.vars['round_timeout'] = self.round_number self.participant.vars['player_timeout'] += 1 if self.session.vars['game_timeout'] >= 1: self.session.vars['first_timeout'] = True def is_displayed(self): if self.participant.vars['is_mobile'] is False: return True else: return False def vars_for_template(self): language = self.session.config['language'] return dict(language=language) class ResultsWaitPage(WaitPage): def after_all_players_arrive(self): self.group.set_payoffs() body_text = "Waiting for other participants to contribute." def is_displayed(self): if self.participant.vars['is_mobile'] is False: return True else: return False """ class Timed_Out(Page): def is_displayed(self): # if self.participant.vars['is_mobile'] is False and self.session.vars['first_timeout'] is True \ # and self.round_number == self.session.vars['round_timeout']: if self.session.vars['first_timeout'] is True and self.participant.vars['player_timeout'] != 0: return True else: return False def vars_for_template(self): p_timeout_abs = self.participant.vars['player_timeout'] language = self.session.config['language'] return dict(p_timeout=p_timeout_abs, language=language) """ class Results(Page): """Players payoff: How much each has earned""" # timeout_seconds = Constants.timer def vars_for_template(self): if self.group.total_contribution is None: self.group.total_contribution = 0 if self.player.contribution is None: self.player.contribution = 0 # Aggregate public earnings total_earnings = self.group.total_contribution * Constants.multiplier if total_earnings == 0: total_earnings += Constants.endowment # Indiv round earnings round_payoff = (Constants.endowment - self.player.contribution) + total_earnings/Constants.players_per_group language = self.session.config['language'] return dict(total_earnings=total_earnings, timeout=self.session.vars['game_timeout'], round_payoff=round_payoff, language=language) """ def is_displayed(self): # TODO: Chequear que esto funcione if (self.session.vars['game_timeout'] == 0) or \ (self.session.vars['first_timeout'] is True and self.round_number == self.session.vars['round_timeout']) or \ (self.session.vars['first_timeout'] is True and self.round_number == self.session.vars['round_timeout'] + 1 and self.participant.vars['player_timeout'] == 0): # La pagina de resultados aparece 2 veces (En la segunda, se fijan los pagos por alguna razon) return True else: return False """ def before_next_page(self): if self.timeout_happened: self.session.vars['game_timeout'] += 1 self.group.game_timeout = self.session.vars['game_timeout'] self.player.player_timeout += 1 self.participant.vars['player_timeout'] += 1 self.session.vars['round_timeout'] = self.round_number if self.session.vars['game_timeout'] >= 1: self.session.vars['first_timeout'] = True if self.session.vars['first_timeout'] is True: self.group.set_payoffs() class FinalPage(Page): def vars_for_template(self): payoff = self.participant.vars['pg_payoff'] real_payoff = c(payoff).to_real_world_currency(self.session) quiz_payoff = self.participant.vars['quiz_earnings'] language = self.session.config['language'] return dict(payoff=payoff, real_payoff=real_payoff, quiz_payoff=quiz_payoff, language=language) def is_displayed(self): return self.round_number == Constants.num_rounds page_sequence = [Contribute, ResultsWaitPage, Results, FinalPage]