from otree.api import Currency as c, currency_range from ._builtin import Page, WaitPage from .models import Constants class DecisionChoicePage(Page): form_model = 'player' def get_form_fields(self): if self.player.participant.vars['is_first_mover']: return ['choice'] else: return ['choice_if_A', 'choice_if_B'] def error_message(self, values): if self.player.participant.vars['is_first_mover']: if values['choice'] == None: return "Please click on your choice." else: if values['choice_if_A'] == None or values['choice_if_B'] == None: return "Please click on your choice." def before_next_page(self): if self.timeout_happened: if self.player.participant.vars['is_first_mover']: if self.round_number == 1: self.player.choice = 1 else: self.player.choice = self.player.in_round(self.round_number-1).choice else: if self.round_number == 1: self.player.choice_if_A = 1 self.player.choice_if_B = 1 else: self.player.choice_if_A = self.player.in_round(self.round_number-1).choice_if_A self.player.choice_if_B = self.player.in_round(self.round_number-1).choice_if_B def vars_for_template(self): game = self.session.vars['Stage4Game'] self.player.is_first_mover = self.player.participant.vars['is_first_mover'] is_first_mover = self.player.is_first_mover pairing = game.participant_game_sequence_dict[self.player.participant][self.round_number-1] self.player.pairing_uuid = pairing.pairing_uuid self.player.game_number = pairing.game_number my_image = f'Image/Smile0.png' copart_image = f'Image/Smile0.png' payoff_matrix = game.get_payoff_matrix(self.player.participant, self.round_number) return dict( participant_id=self.player.participant.id_in_session, round_number=self.round_number, is_first_mover=is_first_mover, payoff_matrix=payoff_matrix, my_image=my_image, copart_image=copart_image, ) class InstructionsPage(Page): def vars_for_template(self): figure1 = f'Image/Stage 3 Figure 1 Control.png' figure2 = f'Image/Stage 3 Figure 2 Control.png' stage3box = f'Image/Stage 3 box.png' return dict( participant_id=self.player.participant.id_in_session, figure1=figure1, figure2=figure2, stage3box=stage3box ) def is_displayed(self): print('instrucitons page', self.session.vars) return self.round_number == 1 class WaitForAllPlayersToFinish(WaitPage): wait_for_all_groups = True after_all_players_arrive = 'update_payoff' def is_displayed(self): return self.round_number == Constants.num_rounds class ControlQuestionnaire2Page(Page): form_model = 'player' def get_form_fields(self): if self.player.participant.vars['is_first_mover']: return ['question1', 'question2', 'question5', 'question6'] else: return ['question1', 'question2', 'question3', 'question4', 'question5', 'question6'] def vars_for_template(self): player_image = 'Image/Smile0.png' figure1 = f'Image/Stage 3 Figure 1 Control.png' figure2 = f'Image/Stage 3 Figure 2 Control.png' stage3box = f'Image/Stage 3 box.png' return dict( is_first_mover=self.player.participant.vars['is_first_mover'], participant_id=self.player.participant.id_in_session, player_image=player_image, figure1=figure1, figure2=figure2, stage3box=stage3box ) def is_displayed(self): return self.round_number == 1 page_sequence = [InstructionsPage, ControlQuestionnaire2Page, DecisionChoicePage, WaitForAllPlayersToFinish]