from ._builtin import Page, WaitPage from otree.api import Currency as c, currency_range from .models import Constants class Introduction(Page): form_model = 'player' form_fields = ['residence', 'age', 'gender'] # this means player.name, player.age, player.sex #def get_timeout_seconds(self): # return self.session.config['timeout_for_instructions'] def is_displayed(self): return self.round_number == 1 def vars_for_template(self): game_name = self.session.config['game_name'] pdf_link_color = self.session.config['pdf_link_color'] pdf_link_text = self.session.config['pdf_link_text'] return dict( game_name=game_name, image_path='img_for_players/3x3/1_introduction/{}.jpg'.format(self.round_number), pdf_path='pdf_for_players/3x3/1_introduction/{}.pdf'.format(self.round_number), pdf_link_color=pdf_link_color, pdf_link_text=pdf_link_text ) class Decision(Page): def get_timeout_seconds(self): return self.session.config['timeout_for_decisions'] def is_displayed(self): return self.round_number <= self.session.config['num_repetitions'] form_model = 'player' form_fields = ['decision'] def vars_for_template(self): chat1 = self.session.config['chat'] return dict( image_path='img_for_players/3x3/2_decision/{}.jpg'.format(self.round_number), chat1 = chat1 ) class ResultsWaitPage(WaitPage): def after_all_players_arrive(self): for p in self.group.get_players(): p.set_payoff() class Results(Page): def get_timeout_seconds(self): return self.session.config['timeout_for_intermediate_results'] def is_displayed(self): return self.round_number <= self.session.config['num_repetitions'] def vars_for_template(self): me = self.player opponent = me.other_player() player_role = me.role() #Player with ID 1 opponent_role = opponent.role() #Player with ID 2 pdf_link_color = self.session.config['pdf_link_color'] pdf_link_text = self.session.config['pdf_link_text'] instructions_link_color = self.session.config['instructions_link_color'] my_payoff = me.payoff return { 'player_role': player_role, 'opponent_role': opponent_role, 'my_decision': me.decision, 'opponent_decision': opponent.decision, 'my_payoff': my_payoff, 'opponent_payoff': opponent.payoff, #Conditions for customized result message 'customer': player_role == 'customer', 'store': player_role == 'online store', 'customer_message_buy': my_payoff == me.session.config['P1_payoff_P1S1_P2S1'], 'customer_message_postpone': my_payoff == me.session.config['P1_payoff_P1S2_P2S1'], 'customer_message_change': my_payoff == me.session.config['P1_payoff_P1S3_P2S1'], 'customer_message_wait': my_payoff == me.session.config['P1_payoff_P1S1_P2S3'], 'store_message_sale': my_payoff >= me.session.config['P2_payoff_P2S2_P1S1'], 'store_message_lost': my_payoff <= me.session.config['P2_payoff_P2S3_P1S3'], #Imagepath for customized result message 'image_path_buy':'img_for_players/3x3/3_interm_results/strategybuy.jpg', 'image_path_sold_out':'img_for_players/3x3/3_interm_results/soldout.jpg', 'image_path_postpone':'img_for_players/3x3/3_interm_results/strategypostpone.jpg', 'image_path_change':'img_for_players/3x3/3_interm_results/strategychange.jpg', 'image_path_sale':'img_for_players/3x3/3_interm_results/sold.jpg', 'image_path_lost':'img_for_players/3x3/3_interm_results/lost.jpg', 'image_path':'img_for_players/3x3/3_interm_results/{}.jpg'.format(self.round_number), #Instructions as PDF-File 'pdf_path': 'pdf_for_players/3x3/1_introduction/1.pdf', 'pdf_link_color': pdf_link_color, 'pdf_link_text': pdf_link_text, 'instructions_link_color': instructions_link_color, } class ResultsSummary(Page): def is_displayed(self): return self.round_number == self.session.config['num_repetitions'] def vars_for_template(self): me = self.player opponent = me.other_player() player_in_all_rounds = me.in_all_rounds() opponent_in_all_rounds = opponent.in_all_rounds() player_opponent_in_all_rounds = zip(player_in_all_rounds, opponent_in_all_rounds) return { 'player_in_all_rounds': player_in_all_rounds, 'player_opponent_in_all_rounds' : player_opponent_in_all_rounds } page_sequence = [ Introduction, Decision, ResultsWaitPage, Results, ResultsSummary ]