from otree.api import * import math author = 'Your name here.' doc = """ Decision Study """ # Models class C(BaseConstants): NAME_IN_URL = 'Part3' PLAYERS_PER_GROUP = 9 NUM_ROUNDS = 1 ENDOWMENT = cu(120.00) MULTIPLIER = 2 PARTICIPATION_FEE = 10 class Subsession(BaseSubsession): pass class Group(BaseGroup): p1_decision = models.FloatField(initial=0) p2_decision = models.IntegerField(initial=0) p3_decision = models.IntegerField(initial=0) def is_displayed(self): return self.round_number == C.NUM_ROUNDS # If you need group-level payoff computation, add here def set_group_payoffs(self): # Compute and set group-level payoffs if necessary pass class Player(BasePlayer): participation_fee = models.IntegerField(initial=10) converted_chf = models.FloatField() final_payoff = models.FloatField() final_payoff_display = models.StringField() ceo_employee = models.FloatField() ceo_points = models.IntegerField() def set_payoffs(self): p2_decision = self.group.p2_decision p3_decision = self.group.p3_decision p1_decision11 = self.participant.vars['decision11_from_part2'] p1_decision12 = self.participant.vars['decision12_from_part2'] p1_decision13 = self.participant.vars['decision13_from_part2'] if p3_decision == 1: self.payoff = (C.ENDOWMENT - p1_decision13) # Pages class WaitForGroupPage(WaitPage): template_name = 'custom/custom_wait_page_3.html' group_by_arrival_time = True # in Part3's pages.py, at the start of Part3 class StartOfPage3(Page): timeout_seconds = 0 @staticmethod def before_next_page(player, timeout_happened): for idx, decision in enumerate(['p1_decision', 'p2_decision', 'p3_decision']): # Retrieve the value and ensure it's an integer decision_value = player.participant.vars.get(f"{decision}_from_part2", 0) # Convert the value to integer if it's not already one integer_value = int(decision_value) if isinstance(decision_value, (float, Currency)) else decision_value # Set the attribute on the group object setattr(player.group, decision, integer_value) @staticmethod def vars_for_template(player): decisions = ['decision11_from_part2', 'decision12_from_part2', 'decision13_from_part2', 'decision2_from_part2', 'decision3_from_part2'] return {decision: player.participant.vars.get(decision) for decision in decisions} class PayoffEmployee(Page): def is_displayed(self: Player): return self.id_in_group == 1 def vars_for_template(player: Player): # Getting decisions of other players supervisor_decision = player.group.get_player_by_id(5).participant.vars['decision2_from_part2'] ceo_decision = player.group.get_player_by_id(9).participant.vars['decision3_from_part2'] decisions_from_part2_keys = ['decision11_from_part2', 'decision12_from_part2', 'decision13_from_part2'] points_kept = {} converted_chf = {} ceo_employee = {} # Calculating points kept and converted amounts for each decision for key in decisions_from_part2_keys: decision_value = player.participant.vars.get(key, 0) points_kept[key] = int(C.ENDOWMENT - decision_value) converted_chf[key] = "{:.2f}".format(round(points_kept[key] * 0.1, 2)) if ceo_decision == 2 and supervisor_decision == 1: player.converted_chf = float(converted_chf['decision11_from_part2']) player.final_payoff = float(player.converted_chf + C.PARTICIPATION_FEE) player.final_payoff_display = "{:.2f}".format(player.final_payoff) player.ceo_employee = player.group.get_player_by_id(1).participant.vars['decision11_from_part2'] return { 'ceo_decision': ceo_decision, 'supervisor_decision': supervisor_decision, 'points_kept_11': points_kept['decision11_from_part2'], 'points_kept_12': points_kept['decision12_from_part2'], 'points_kept_13': points_kept['decision13_from_part2'], 'decision11_from_part2': player.participant.vars.get('decision11_from_part2', 0), 'decision12_from_part2': player.participant.vars.get('decision12_from_part2', 0), 'decision13_from_part2': player.participant.vars.get('decision13_from_part2', 0), 'converted_chf': converted_chf['decision11_from_part2'], } if ceo_decision == 2 and supervisor_decision == 2: player.converted_chf = float(converted_chf['decision12_from_part2']) player.final_payoff = round((player.converted_chf + C.PARTICIPATION_FEE), 2) player.final_payoff_display = "{:.2f}".format(player.final_payoff) player.ceo_employee = player.group.get_player_by_id(1).participant.vars['decision12_from_part2'] return { 'ceo_decision': ceo_decision, 'supervisor_decision': supervisor_decision, 'points_kept_11': points_kept['decision11_from_part2'], 'points_kept_12': points_kept['decision12_from_part2'], 'points_kept_13': points_kept['decision13_from_part2'], 'decision11_from_part2': player.participant.vars.get('decision11_from_part2', 0), 'decision12_from_part2': player.participant.vars.get('decision12_from_part2', 0), 'decision13_from_part2': player.participant.vars.get('decision13_from_part2', 0), 'converted_chf': converted_chf['decision12_from_part2'], } if ceo_decision == 1: player.converted_chf = float(converted_chf['decision13_from_part2']) player.final_payoff = float(player.converted_chf + C.PARTICIPATION_FEE) player.final_payoff_display = "{:.2f}".format(player.final_payoff) player.ceo_employee = player.group.get_player_by_id(1).participant.vars['decision13_from_part2'] return { 'ceo_decision': ceo_decision, 'supervisor_decision': supervisor_decision, 'points_kept_11': points_kept['decision11_from_part2'], 'points_kept_12': points_kept['decision12_from_part2'], 'points_kept_13': points_kept['decision13_from_part2'], 'decision11_from_part2': player.participant.vars.get('decision11_from_part2', 0), 'decision12_from_part2': player.participant.vars.get('decision12_from_part2', 0), 'decision13_from_part2': player.participant.vars.get('decision13_from_part2', 0), 'converted_chf': converted_chf['decision13_from_part2'], } def before_next_page(player: Player, timeout_happened): decision_keys = ['decision11_from_part2', 'decision12_from_part2', 'decision13_from_part2'] player.participant.vars['ceo_employee'] = player.ceo_employee for key in decision_keys: decision_from_part2 = player.participant.vars.get(key, 0) points_kept = C.ENDOWMENT - decision_from_part2 class PayoffEmployee2(Page): def is_displayed(self: Player): return self.id_in_group == 2 def vars_for_template(player: Player): # Getting decisions of other players supervisor_decision = player.group.get_player_by_id(6).participant.vars['decision2_from_part2'] ceo_decision = player.group.get_player_by_id(9).participant.vars['decision3_from_part2'] decisions_from_part2_keys = ['decision11_from_part2', 'decision12_from_part2', 'decision13_from_part2'] points_kept = {} converted_chf = {} ceo_employee = {} # Calculating points kept and converted amounts for each decision for key in decisions_from_part2_keys: decision_value = player.participant.vars.get(key, 0) points_kept[key] = int(C.ENDOWMENT - decision_value) converted_chf[key] = "{:.2f}".format(round(points_kept[key] * 0.1, 2)) if ceo_decision == 2 and supervisor_decision == 1: player.converted_chf = float(converted_chf['decision11_from_part2']) player.final_payoff = float(player.converted_chf + C.PARTICIPATION_FEE) player.final_payoff_display = "{:.2f}".format(player.final_payoff) player.ceo_employee = player.group.get_player_by_id(2).participant.vars['decision11_from_part2'] return { 'ceo_decision': ceo_decision, 'supervisor_decision': supervisor_decision, 'points_kept_11': points_kept['decision11_from_part2'], 'points_kept_12': points_kept['decision12_from_part2'], 'points_kept_13': points_kept['decision13_from_part2'], 'decision11_from_part2': player.participant.vars.get('decision11_from_part2', 0), 'decision12_from_part2': player.participant.vars.get('decision12_from_part2', 0), 'decision13_from_part2': player.participant.vars.get('decision13_from_part2', 0), 'converted_chf': converted_chf['decision11_from_part2'] } if ceo_decision == 2 and supervisor_decision == 2: player.converted_chf = float(converted_chf['decision12_from_part2']) player.final_payoff = round((player.converted_chf + C.PARTICIPATION_FEE), 2) player.final_payoff_display = "{:.2f}".format(player.final_payoff) player.ceo_employee = player.group.get_player_by_id(2).participant.vars['decision12_from_part2'] return { 'ceo_decision': ceo_decision, 'supervisor_decision': supervisor_decision, 'points_kept_11': points_kept['decision11_from_part2'], 'points_kept_12': points_kept['decision12_from_part2'], 'points_kept_13': points_kept['decision13_from_part2'], 'decision11_from_part2': player.participant.vars.get('decision11_from_part2', 0), 'decision12_from_part2': player.participant.vars.get('decision12_from_part2', 0), 'decision13_from_part2': player.participant.vars.get('decision13_from_part2', 0), 'converted_chf': converted_chf['decision12_from_part2'] } if ceo_decision == 1: player.converted_chf = float(converted_chf['decision13_from_part2']) player.final_payoff = float(player.converted_chf + C.PARTICIPATION_FEE) player.final_payoff_display = "{:.2f}".format(player.final_payoff) player.ceo_employee = player.group.get_player_by_id(2).participant.vars['decision13_from_part2'] return { 'ceo_decision': ceo_decision, 'supervisor_decision': supervisor_decision, 'points_kept_11': points_kept['decision11_from_part2'], 'points_kept_12': points_kept['decision12_from_part2'], 'points_kept_13': points_kept['decision13_from_part2'], 'decision11_from_part2': player.participant.vars.get('decision11_from_part2', 0), 'decision12_from_part2': player.participant.vars.get('decision12_from_part2', 0), 'decision13_from_part2': player.participant.vars.get('decision13_from_part2', 0), 'converted_chf': converted_chf['decision13_from_part2'] } def before_next_page(player: Player, timeout_happened): decision_keys = ['decision11_from_part2', 'decision12_from_part2', 'decision13_from_part2'] player.participant.vars['ceo_employee'] = player.ceo_employee for key in decision_keys: decision_from_part2 = player.participant.vars.get(key, 0) points_kept = C.ENDOWMENT - decision_from_part2 class PayoffEmployee3(Page): def is_displayed(self: Player): return self.id_in_group == 3 def vars_for_template(player: Player): # Getting decisions of other players supervisor_decision = player.group.get_player_by_id(7).participant.vars['decision2_from_part2'] ceo_decision = player.group.get_player_by_id(9).participant.vars['decision3_from_part2'] decisions_from_part2_keys = ['decision11_from_part2', 'decision12_from_part2', 'decision13_from_part2'] points_kept = {} converted_chf = {} ceo_employee = {} # Calculating points kept and converted amounts for each decision for key in decisions_from_part2_keys: decision_value = player.participant.vars.get(key, 0) points_kept[key] = int(C.ENDOWMENT - decision_value) converted_chf[key] = "{:.2f}".format(round(points_kept[key] * 0.1, 2)) if ceo_decision == 2 and supervisor_decision == 1: player.converted_chf = float(converted_chf['decision11_from_part2']) player.final_payoff = float(player.converted_chf + C.PARTICIPATION_FEE) player.final_payoff_display = "{:.2f}".format(player.final_payoff) player.ceo_employee = player.group.get_player_by_id(3).participant.vars['decision11_from_part2'] return { 'ceo_decision': ceo_decision, 'supervisor_decision': supervisor_decision, 'points_kept_11': points_kept['decision11_from_part2'], 'points_kept_12': points_kept['decision12_from_part2'], 'points_kept_13': points_kept['decision13_from_part2'], 'decision11_from_part2': player.participant.vars.get('decision11_from_part2', 0), 'decision12_from_part2': player.participant.vars.get('decision12_from_part2', 0), 'decision13_from_part2': player.participant.vars.get('decision13_from_part2', 0), 'converted_chf': converted_chf['decision11_from_part2'] } if ceo_decision == 2 and supervisor_decision == 2: player.converted_chf = float(converted_chf['decision12_from_part2']) player.final_payoff = round((player.converted_chf + C.PARTICIPATION_FEE), 2) player.final_payoff_display = "{:.2f}".format(player.final_payoff) player.ceo_employee = player.group.get_player_by_id(3).participant.vars['decision12_from_part2'] return { 'ceo_decision': ceo_decision, 'supervisor_decision': supervisor_decision, 'points_kept_11': points_kept['decision11_from_part2'], 'points_kept_12': points_kept['decision12_from_part2'], 'points_kept_13': points_kept['decision13_from_part2'], 'decision11_from_part2': player.participant.vars.get('decision11_from_part2', 0), 'decision12_from_part2': player.participant.vars.get('decision12_from_part2', 0), 'decision13_from_part2': player.participant.vars.get('decision13_from_part2', 0), 'converted_chf': converted_chf['decision12_from_part2'] } if ceo_decision == 1: player.converted_chf = float(converted_chf['decision13_from_part2']) player.final_payoff = float(player.converted_chf + C.PARTICIPATION_FEE) player.final_payoff_display = "{:.2f}".format(player.final_payoff) player.ceo_employee = player.group.get_player_by_id(3).participant.vars['decision13_from_part2'] return { 'ceo_decision': ceo_decision, 'supervisor_decision': supervisor_decision, 'points_kept_11': points_kept['decision11_from_part2'], 'points_kept_12': points_kept['decision12_from_part2'], 'points_kept_13': points_kept['decision13_from_part2'], 'decision11_from_part2': player.participant.vars.get('decision11_from_part2', 0), 'decision12_from_part2': player.participant.vars.get('decision12_from_part2', 0), 'decision13_from_part2': player.participant.vars.get('decision13_from_part2', 0), 'converted_chf': converted_chf['decision13_from_part2'] } def before_next_page(player: Player, timeout_happened): decision_keys = ['decision11_from_part2', 'decision12_from_part2', 'decision13_from_part2'] player.participant.vars['ceo_employee'] = player.ceo_employee for key in decision_keys: decision_from_part2 = player.participant.vars.get(key, 0) points_kept = C.ENDOWMENT - decision_from_part2 class PayoffEmployee4(Page): def is_displayed(self: Player): return self.id_in_group == 4 def vars_for_template(player: Player): # Getting decisions of other players supervisor_decision = player.group.get_player_by_id(8).participant.vars['decision2_from_part2'] ceo_decision = player.group.get_player_by_id(9).participant.vars['decision3_from_part2'] decisions_from_part2_keys = ['decision11_from_part2', 'decision12_from_part2', 'decision13_from_part2'] points_kept = {} converted_chf = {} ceo_employee = {} # Calculating points kept and converted amounts for each decision for key in decisions_from_part2_keys: decision_value = player.participant.vars.get(key, 0) points_kept[key] = int(C.ENDOWMENT - decision_value) converted_chf[key] = "{:.2f}".format(round(points_kept[key] * 0.1, 2)) if ceo_decision == 2 and supervisor_decision == 1: player.converted_chf = float(converted_chf['decision11_from_part2']) player.final_payoff = float(player.converted_chf + C.PARTICIPATION_FEE) player.final_payoff_display = "{:.2f}".format(player.final_payoff) player.ceo_employee = player.group.get_player_by_id(4).participant.vars['decision11_from_part2'] return { 'ceo_decision': ceo_decision, 'supervisor_decision': supervisor_decision, 'points_kept_11': points_kept['decision11_from_part2'], 'points_kept_12': points_kept['decision12_from_part2'], 'points_kept_13': points_kept['decision13_from_part2'], 'decision11_from_part2': player.participant.vars.get('decision11_from_part2', 0), 'decision12_from_part2': player.participant.vars.get('decision12_from_part2', 0), 'decision13_from_part2': player.participant.vars.get('decision13_from_part2', 0), 'converted_chf': converted_chf['decision11_from_part2'] } if ceo_decision == 2 and supervisor_decision == 2: player.converted_chf = float(converted_chf['decision12_from_part2']) player.final_payoff = round((player.converted_chf + C.PARTICIPATION_FEE), 2) player.final_payoff_display = "{:.2f}".format(player.final_payoff) player.ceo_employee = player.group.get_player_by_id(4).participant.vars['decision12_from_part2'] return { 'ceo_decision': ceo_decision, 'supervisor_decision': supervisor_decision, 'points_kept_11': points_kept['decision11_from_part2'], 'points_kept_12': points_kept['decision12_from_part2'], 'points_kept_13': points_kept['decision13_from_part2'], 'decision11_from_part2': player.participant.vars.get('decision11_from_part2', 0), 'decision12_from_part2': player.participant.vars.get('decision12_from_part2', 0), 'decision13_from_part2': player.participant.vars.get('decision13_from_part2', 0), 'converted_chf': converted_chf['decision12_from_part2'] } if ceo_decision == 1: player.converted_chf = float(converted_chf['decision13_from_part2']) player.final_payoff = float(player.converted_chf + C.PARTICIPATION_FEE) player.final_payoff_display = "{:.2f}".format(player.final_payoff) player.ceo_employee = player.group.get_player_by_id(4).participant.vars['decision13_from_part2'] return { 'ceo_decision': ceo_decision, 'supervisor_decision': supervisor_decision, 'points_kept_11': points_kept['decision11_from_part2'], 'points_kept_12': points_kept['decision12_from_part2'], 'points_kept_13': points_kept['decision13_from_part2'], 'decision11_from_part2': player.participant.vars.get('decision11_from_part2', 0), 'decision12_from_part2': player.participant.vars.get('decision12_from_part2', 0), 'decision13_from_part2': player.participant.vars.get('decision13_from_part2', 0), 'converted_chf': converted_chf['decision13_from_part2'] } def before_next_page(player: Player, timeout_happened): decision_keys = ['decision11_from_part2', 'decision12_from_part2', 'decision13_from_part2'] player.participant.vars['ceo_employee'] = player.ceo_employee for key in decision_keys: decision_from_part2 = player.participant.vars.get(key, 0) points_kept = C.ENDOWMENT - decision_from_part2 class PayoffSupervisor(Page): def is_displayed(self: Player): return self.id_in_group == 5 def vars_for_template(player: Player): supervisor_decision = player.group.get_player_by_id(5).participant.vars['decision2_from_part2'] ceo_decision = player.group.get_player_by_id(9).participant.vars['decision3_from_part2'] decision_keys = ['decision11_from_part2', 'decision12_from_part2', 'decision13_from_part2'] employee_decisions = {} multiplied_values = {} converted_chf = {} # Fetch decisions, calculate multiplied and converted values for key in decision_keys: decision_value = player.group.get_player_by_id(1).participant.vars[key] employee_decisions[key] = decision_value multiplied_values[key] = decision_value * C.MULTIPLIER converted_chf[key] = "{:.2f}".format(round(multiplied_values[key] * 0.1, 2)) if ceo_decision == 2 and supervisor_decision == 1: player.converted_chf = float(converted_chf['decision11_from_part2']) player.final_payoff = float(player.converted_chf + C.PARTICIPATION_FEE) player.final_payoff_display = "{:.2f}".format(player.final_payoff) return { 'ceo_decision': ceo_decision, 'employee_decision11': employee_decisions['decision11_from_part2'], 'employee_decision12': employee_decisions['decision12_from_part2'], 'employee_decision13': employee_decisions['decision13_from_part2'], 'multiplied_11': multiplied_values['decision11_from_part2'], 'multiplied_12': multiplied_values['decision12_from_part2'], 'multiplied_13': multiplied_values['decision13_from_part2'], 'converted_chf': converted_chf['decision11_from_part2'] } if ceo_decision == 2 and supervisor_decision == 2: player.converted_chf = float(converted_chf['decision12_from_part2']) player.final_payoff = float(player.converted_chf + C.PARTICIPATION_FEE) player.final_payoff_display = "{:.2f}".format(player.final_payoff) return { 'ceo_decision': ceo_decision, 'employee_decision11': employee_decisions['decision11_from_part2'], 'employee_decision12': employee_decisions['decision12_from_part2'], 'employee_decision13': employee_decisions['decision13_from_part2'], 'multiplied_11': multiplied_values['decision11_from_part2'], 'multiplied_12': multiplied_values['decision12_from_part2'], 'multiplied_13': multiplied_values['decision13_from_part2'], 'converted_chf': converted_chf['decision12_from_part2'] } if ceo_decision == 1: player.converted_chf = float(converted_chf['decision13_from_part2']) player.final_payoff = float(player.converted_chf + C.PARTICIPATION_FEE) player.final_payoff_display = "{:.2f}".format(player.final_payoff) return { 'ceo_decision': ceo_decision, 'employee_decision11': employee_decisions['decision11_from_part2'], 'employee_decision12': employee_decisions['decision12_from_part2'], 'employee_decision13': employee_decisions['decision13_from_part2'], 'multiplied_11': multiplied_values['decision11_from_part2'], 'multiplied_12': multiplied_values['decision12_from_part2'], 'multiplied_13': multiplied_values['decision13_from_part2'], 'converted_chf': converted_chf['decision13_from_part2'] } def before_next_page(player: Player, timeout_happened): decision_keys = ['decision11_from_part2', 'decision12_from_part2', 'decision13_from_part2'] for key in decision_keys: decision_value = player.group.get_player_by_id(1).participant.vars[key] multiplied_value = decision_value * C.MULTIPLIER class PayoffSupervisor2(Page): def is_displayed(self: Player): return self.id_in_group == 6 def vars_for_template(player: Player): supervisor_decision = player.group.get_player_by_id(6).participant.vars['decision2_from_part2'] ceo_decision = player.group.get_player_by_id(9).participant.vars['decision3_from_part2'] decision_keys = ['decision11_from_part2', 'decision12_from_part2', 'decision13_from_part2'] employee_decisions = {} multiplied_values = {} converted_chf = {} # Fetch decisions, calculate multiplied and converted values for key in decision_keys: decision_value = player.group.get_player_by_id(2).participant.vars[key] employee_decisions[key] = decision_value multiplied_values[key] = decision_value * C.MULTIPLIER converted_chf[key] = "{:.2f}".format(round(multiplied_values[key] * 0.1, 2)) if ceo_decision == 2 and supervisor_decision == 1: player.converted_chf = float(converted_chf['decision11_from_part2']) player.final_payoff = float(player.converted_chf + C.PARTICIPATION_FEE) player.final_payoff_display = "{:.2f}".format(player.final_payoff) return { 'ceo_decision': ceo_decision, 'employee_decision11': employee_decisions['decision11_from_part2'], 'employee_decision12': employee_decisions['decision12_from_part2'], 'employee_decision13': employee_decisions['decision13_from_part2'], 'multiplied_11': multiplied_values['decision11_from_part2'], 'multiplied_12': multiplied_values['decision12_from_part2'], 'multiplied_13': multiplied_values['decision13_from_part2'], 'converted_chf': converted_chf['decision11_from_part2'] } if ceo_decision == 2 and supervisor_decision == 2: player.converted_chf = float(converted_chf['decision12_from_part2']) player.final_payoff = float(player.converted_chf + C.PARTICIPATION_FEE) player.final_payoff_display = "{:.2f}".format(player.final_payoff) return { 'ceo_decision': ceo_decision, 'employee_decision11': employee_decisions['decision11_from_part2'], 'employee_decision12': employee_decisions['decision12_from_part2'], 'employee_decision13': employee_decisions['decision13_from_part2'], 'multiplied_11': multiplied_values['decision11_from_part2'], 'multiplied_12': multiplied_values['decision12_from_part2'], 'multiplied_13': multiplied_values['decision13_from_part2'], 'converted_chf': converted_chf['decision12_from_part2'] } if ceo_decision == 1: player.converted_chf = float(converted_chf['decision13_from_part2']) player.final_payoff = float(player.converted_chf + C.PARTICIPATION_FEE) player.final_payoff_display = "{:.2f}".format(player.final_payoff) return { 'ceo_decision': ceo_decision, 'employee_decision11': employee_decisions['decision11_from_part2'], 'employee_decision12': employee_decisions['decision12_from_part2'], 'employee_decision13': employee_decisions['decision13_from_part2'], 'multiplied_11': multiplied_values['decision11_from_part2'], 'multiplied_12': multiplied_values['decision12_from_part2'], 'multiplied_13': multiplied_values['decision13_from_part2'], 'converted_chf': converted_chf['decision13_from_part2'] } def before_next_page(player: Player, timeout_happened): decision_keys = ['decision11_from_part2', 'decision12_from_part2', 'decision13_from_part2'] for key in decision_keys: decision_value = player.group.get_player_by_id(2).participant.vars[key] multiplied_value = decision_value * C.MULTIPLIER class PayoffSupervisor3(Page): def is_displayed(self: Player): return self.id_in_group == 7 def vars_for_template(player: Player): supervisor_decision = player.group.get_player_by_id(7).participant.vars['decision2_from_part2'] ceo_decision = player.group.get_player_by_id(9).participant.vars['decision3_from_part2'] decision_keys = ['decision11_from_part2', 'decision12_from_part2', 'decision13_from_part2'] employee_decisions = {} multiplied_values = {} converted_chf = {} # Fetch decisions, calculate multiplied and converted values for key in decision_keys: decision_value = player.group.get_player_by_id(3).participant.vars[key] employee_decisions[key] = decision_value multiplied_values[key] = decision_value * C.MULTIPLIER converted_chf[key] = "{:.2f}".format(round(multiplied_values[key] * 0.1, 2)) if ceo_decision == 2 and supervisor_decision == 1: player.converted_chf = float(converted_chf['decision11_from_part2']) player.final_payoff = float(player.converted_chf + C.PARTICIPATION_FEE) player.final_payoff_display = "{:.2f}".format(player.final_payoff) return { 'ceo_decision': ceo_decision, 'employee_decision11': employee_decisions['decision11_from_part2'], 'employee_decision12': employee_decisions['decision12_from_part2'], 'employee_decision13': employee_decisions['decision13_from_part2'], 'multiplied_11': multiplied_values['decision11_from_part2'], 'multiplied_12': multiplied_values['decision12_from_part2'], 'multiplied_13': multiplied_values['decision13_from_part2'], 'converted_chf': converted_chf['decision11_from_part2'] } if ceo_decision == 2 and supervisor_decision == 2: player.converted_chf = float(converted_chf['decision12_from_part2']) player.final_payoff = float(player.converted_chf + C.PARTICIPATION_FEE) player.final_payoff_display = "{:.2f}".format(player.final_payoff) return { 'ceo_decision': ceo_decision, 'employee_decision11': employee_decisions['decision11_from_part2'], 'employee_decision12': employee_decisions['decision12_from_part2'], 'employee_decision13': employee_decisions['decision13_from_part2'], 'multiplied_11': multiplied_values['decision11_from_part2'], 'multiplied_12': multiplied_values['decision12_from_part2'], 'multiplied_13': multiplied_values['decision13_from_part2'], 'converted_chf': converted_chf['decision12_from_part2'] } if ceo_decision == 1: player.converted_chf = float(converted_chf['decision13_from_part2']) player.final_payoff = float(player.converted_chf + C.PARTICIPATION_FEE) player.final_payoff_display = "{:.2f}".format(player.final_payoff) return { 'ceo_decision': ceo_decision, 'employee_decision11': employee_decisions['decision11_from_part2'], 'employee_decision12': employee_decisions['decision12_from_part2'], 'employee_decision13': employee_decisions['decision13_from_part2'], 'multiplied_11': multiplied_values['decision11_from_part2'], 'multiplied_12': multiplied_values['decision12_from_part2'], 'multiplied_13': multiplied_values['decision13_from_part2'], 'converted_chf': converted_chf['decision13_from_part2'] } def before_next_page(player: Player, timeout_happened): decision_keys = ['decision11_from_part2', 'decision12_from_part2', 'decision13_from_part2'] for key in decision_keys: decision_value = player.group.get_player_by_id(3).participant.vars[key] multiplied_value = decision_value * C.MULTIPLIER class PayoffSupervisor4(Page): def is_displayed(self: Player): return self.id_in_group == 8 def vars_for_template(player: Player): supervisor_decision = player.group.get_player_by_id(8).participant.vars['decision2_from_part2'] ceo_decision = player.group.get_player_by_id(9).participant.vars['decision3_from_part2'] decision_keys = ['decision11_from_part2', 'decision12_from_part2', 'decision13_from_part2'] employee_decisions = {} multiplied_values = {} converted_chf = {} # Fetch decisions, calculate multiplied and converted values for key in decision_keys: decision_value = player.group.get_player_by_id(4).participant.vars[key] employee_decisions[key] = decision_value multiplied_values[key] = decision_value * C.MULTIPLIER converted_chf[key] = "{:.2f}".format(round(multiplied_values[key] * 0.1, 2)) if ceo_decision == 2 and supervisor_decision == 1: player.converted_chf = float(converted_chf['decision11_from_part2']) player.final_payoff = float(player.converted_chf + C.PARTICIPATION_FEE) player.final_payoff_display = "{:.2f}".format(player.final_payoff) return { 'ceo_decision': ceo_decision, 'employee_decision11': employee_decisions['decision11_from_part2'], 'employee_decision12': employee_decisions['decision12_from_part2'], 'employee_decision13': employee_decisions['decision13_from_part2'], 'multiplied_11': multiplied_values['decision11_from_part2'], 'multiplied_12': multiplied_values['decision12_from_part2'], 'multiplied_13': multiplied_values['decision13_from_part2'], 'converted_chf': converted_chf['decision11_from_part2'] } if ceo_decision == 2 and supervisor_decision == 2: player.converted_chf = float(converted_chf['decision12_from_part2']) player.final_payoff = float(player.converted_chf + C.PARTICIPATION_FEE) player.final_payoff_display = "{:.2f}".format(player.final_payoff) return { 'ceo_decision': ceo_decision, 'employee_decision11': employee_decisions['decision11_from_part2'], 'employee_decision12': employee_decisions['decision12_from_part2'], 'employee_decision13': employee_decisions['decision13_from_part2'], 'multiplied_11': multiplied_values['decision11_from_part2'], 'multiplied_12': multiplied_values['decision12_from_part2'], 'multiplied_13': multiplied_values['decision13_from_part2'], 'converted_chf': converted_chf['decision12_from_part2'] } if ceo_decision == 1: player.converted_chf = float(converted_chf['decision13_from_part2']) player.final_payoff = float(player.converted_chf + C.PARTICIPATION_FEE) player.final_payoff_display = "{:.2f}".format(player.final_payoff) return { 'ceo_decision': ceo_decision, 'employee_decision11': employee_decisions['decision11_from_part2'], 'employee_decision12': employee_decisions['decision12_from_part2'], 'employee_decision13': employee_decisions['decision13_from_part2'], 'multiplied_11': multiplied_values['decision11_from_part2'], 'multiplied_12': multiplied_values['decision12_from_part2'], 'multiplied_13': multiplied_values['decision13_from_part2'], 'converted_chf': converted_chf['decision13_from_part2'] } def before_next_page(player: Player, timeout_happened): decision_keys = ['decision11_from_part2', 'decision12_from_part2', 'decision13_from_part2'] for key in decision_keys: decision_value = player.group.get_player_by_id(4).participant.vars[key] multiplied_value = decision_value * C.MULTIPLIER class PayoffCEO(Page): def is_displayed(player: Player): return player.id_in_group == 9 def vars_for_template(player: Player): # Initialize a dictionary to hold individual ceo_employee values ceo_employees = {} # Iterate over players in the group for p in player.group.get_players(): # Check if the player's id_in_group is between 1 and 4 if 1 <= p.id_in_group <= 4: # Store their ceo_employee value in the dictionary ceo_employees[f'ceo_employee_{p.id_in_group}'] = p.ceo_employee # Calculate the total ceo_employee value total_ceo_employee = sum(ceo_employees.values()) # Assign the total to ceo_points player.ceo_points = math.ceil(0.5 * total_ceo_employee) ceo_employees['ceo_points'] = player.ceo_points # Calculate final_payoff_display as ceo_points * 0.05 player.converted_chf = float("{:.2f}".format(round(player.ceo_points * 0.1, 2))) player.final_payoff = float(player.converted_chf + C.PARTICIPATION_FEE) player.final_payoff_display = "{:.2f}".format(player.final_payoff) ceo_employees['final_payoff_display'] = player.final_payoff_display return ceo_employees class FinalPage(Page): pass page_sequence = [WaitForGroupPage, StartOfPage3, PayoffSupervisor, PayoffSupervisor2, PayoffSupervisor3, PayoffSupervisor4, PayoffEmployee, PayoffEmployee2, PayoffEmployee3, PayoffEmployee4, PayoffCEO, FinalPage]