from otree.api import Currency as c, currency_range from ._builtin import Page, WaitPage from .models import Constants class greetings_P1(Page): timeout_seconds = 30 def is_displayed(self): return self.round_number == 1 and self.player.id_in_group == 1 class greetings_P2(Page): timeout_seconds = 30 def is_displayed(self): return self.round_number == 1 and self.player.id_in_group == 2 class greetings_P3(Page): timeout_seconds = 30 def is_displayed(self): return self.round_number == 1 and self.player.id_in_group == 3 class firstcut_p1(Page): form_model = 'group' form_fields =['firstcut_1', 'firstcut_2'] def vars_for_template(self): return {'R': self.round_number,'P': self.player.in_round(max(1, self.round_number - 1)).payoff_help} def is_displayed(self): return self.player.id_in_group == 1 and self.round_number <= 5 class firstcut_p1_fulifo(Page): form_model = 'group' form_fields = ['firstcut_1', 'firstcut_2'] def vars_for_template(self): return {'R': self.round_number,'P': self.player.in_round(max(1, self.round_number - 1)).payoff_help} def is_displayed(self): return self.player.id_in_group == 1 and self.round_number > 5 class waitpage_1(WaitPage): def after_all_players_arrive(self): for player in self.group.get_players(): player.find_value_after_firstcut_1() for player in self.group.get_players(): player.find_value_after_firstcut_2() for player in self.group.get_players(): player.find_value_after_firstcut_3() self.group.set_trim_piece() class trim_piece1(Page): form_model = 'group' form_fields =['trim_point'] def vars_for_template(self): return {'R': self.round_number,'P': self.player.in_round(max(1, self.round_number - 1)).payoff_help} def is_displayed(self): return self.player.id_in_group == 2 and self.round_number <= 5 and self.group.trim_piece == 1 class trim_piece2(Page): form_model = 'group' form_fields =['trim_point'] def vars_for_template(self): return {'R': self.round_number,'P': self.player.in_round(max(1, self.round_number - 1)).payoff_help} def is_displayed(self): return self.player.id_in_group == 2 and self.round_number <= 5 and self.group.trim_piece == 2 class trim_piece3(Page): form_model = 'group' form_fields =['trim_point'] def vars_for_template(self): return {'R': self.round_number,'P': self.player.in_round(max(1, self.round_number - 1)).payoff_help} def is_displayed(self): return self.player.id_in_group == 2 and self.round_number <= 5 and self.group.trim_piece == 3 class trim_piece1_fulifo(Page): form_model = 'group' form_fields = ['trim_point'] def vars_for_template(self): return {'R': self.round_number,'P': self.player.in_round(max(1, self.round_number - 1)).payoff_help} def is_displayed(self): return self.player.id_in_group == 2 and self.round_number > 5 and self.group.trim_piece == 1 class trim_piece2_fulifo(Page): form_model = 'group' form_fields = ['trim_point'] def vars_for_template(self): return {'R': self.round_number,'P': self.player.in_round(max(1, self.round_number - 1)).payoff_help} def is_displayed(self): return self.player.id_in_group == 2 and self.round_number > 5 and self.group.trim_piece == 2 class trim_piece3_fulifo(Page): form_model = 'group' form_fields = ['trim_point'] def vars_for_template(self): return {'R': self.round_number,'P': self.player.in_round(max(1, self.round_number - 1)).payoff_help} def is_displayed(self): return self.player.id_in_group == 2 and self.round_number > 5 and self.group.trim_piece == 3 class waitpage_2(WaitPage): def after_all_players_arrive(self): self.group.set_trimmings_length() self.group.set_second_divide_needed() for player in self.group.get_players(): player.find_value_after_trim_1() for player in self.group.get_players(): player.find_value_after_trim_2() for player in self.group.get_players(): player.find_value_after_trim_3() for player in self.group.get_players(): player.set_value_trimmings() class first_choose(Page): form_model = 'group' form_fields = ['first_choice'] def vars_for_template(self): return {'R': self.round_number,'P': self.player.in_round(max(1, self.round_number - 1)).payoff_help} def is_displayed(self): return self.player.id_in_group == 3 and self.round_number <= 5 class first_choose_full_info(Page): form_model = 'group' form_fields = ['first_choice'] def vars_for_template(self): return {'R': self.round_number,'P': self.player.in_round(max(1, self.round_number - 1)).payoff_help} def is_displayed(self): return self.player.id_in_group == 3 and self.round_number > 5 class waitpage_3(WaitPage): def after_all_players_arrive(self): pass class second_choose_without_1(Page): form_model = 'group' form_fields = ['second_choice_without_Left'] def vars_for_template(self): return {'R': self.round_number,'P': self.player.in_round(max(1, self.round_number - 1)).payoff_help} def is_displayed(self): return self.player.id_in_group == 2 and self.group.first_choice == self.group.trim_piece and self.group.first_choice == 1 class second_choose_without_2(Page): form_model = 'group' form_fields = ['second_choice_without_Middle'] def vars_for_template(self): return {'R': self.round_number,'P': self.player.in_round(max(1, self.round_number - 1)).payoff_help} def is_displayed(self): return self.player.id_in_group == 2 and self.group.first_choice == self.group.trim_piece and self.group.first_choice == 2 class second_choose_without_3(Page): form_model = 'group' form_fields = ['second_choice_without_Right'] def vars_for_template(self): return {'R': self.round_number,'P': self.player.in_round(max(1, self.round_number - 1)).payoff_help} def is_displayed(self): return self.player.id_in_group == 2 and self.group.first_choice == self.group.trim_piece and self.group.first_choice == 3 class waitpage_4(WaitPage): def after_all_players_arrive(self): self.group.check_trim_part_picked() class second_choose_automatic_1(Page): timeout_seconds = 20 def vars_for_template(self): return {'R': self.round_number,'P': self.player.in_round(max(1, self.round_number - 1)).payoff_help} def is_displayed(self): return self.player.id_in_group == 2 and self.group.trim_piece == 1 and self.group.first_choice != self.group.trim_piece class second_choose_automatic_2(Page): timeout_seconds = 20 def vars_for_template(self): return {'R': self.round_number,'P': self.player.in_round(max(1, self.round_number - 1)).payoff_help} def is_displayed(self): return self.player.id_in_group == 2 and self.group.trim_piece == 2 and self.group.first_choice != self.group.trim_piece class second_choose_automatic_3(Page): timeout_seconds = 20 def vars_for_template(self): return {'R': self.round_number,'P': self.player.in_round(max(1, self.round_number - 1)).payoff_help} def is_displayed(self): return self.player.id_in_group == 2 and self.group.trim_piece == 3 and self.group.first_choice != self.group.trim_piece class third_choose_1(Page): timeout_seconds = 20 def vars_for_template(self): return {'R': self.round_number,'P': self.player.in_round(max(1, self.round_number - 1)).payoff_help} def is_displayed(self): return self.player.id_in_group == 1 and self.group.third_choice == 1 class third_choose_2(Page): timeout_seconds = 20 def vars_for_template(self): return {'R': self.round_number,'P': self.player.in_round(max(1, self.round_number - 1)).payoff_help} def is_displayed(self): return self.player.id_in_group == 1 and self.group.third_choice == 2 class third_choose_3(Page): timeout_seconds = 20 def vars_for_template(self): return {'R': self.round_number,'P': self.player.in_round(max(1, self.round_number - 1)).payoff_help} def is_displayed(self): return self.player.id_in_group == 1 and self.group.third_choice == 3 class trimcut_p2_trimpiece_1(Page): form_model = 'group' form_fields =['trimcut_1', 'trimcut_2'] def vars_for_template(self): return {'R': self.round_number,'S':int(self.player.value_trimmings/3),'P': self.player.in_round(max(1, self.round_number - 1)).payoff_help} def is_displayed(self): return self.group.second_divide_needed == True and self.group.first_choice == self.group.trim_piece and \ self.group.trim_piece == 1 and self.player.id_in_group == 2 and self.round_number <= 5 class trimcut_p2_trimpiece_1_fulifo(Page): form_model = 'group' form_fields =['trimcut_1', 'trimcut_2'] def vars_for_template(self): return {'R': self.round_number,'S':int(self.player.value_trimmings/3),'P': self.player.in_round(max(1, self.round_number - 1)).payoff_help} def is_displayed(self): return self.group.second_divide_needed == True and self.group.first_choice == self.group.trim_piece and \ self.group.trim_piece == 1 and self.player.id_in_group == 2 and self.round_number > 5 class trimcut_p2_trimpiece_2(Page): form_model = 'group' form_fields =['trimcut_1', 'trimcut_2'] def vars_for_template(self): return {'R': self.round_number,'S':int(self.player.value_trimmings/3),'P': self.player.in_round(max(1, self.round_number - 1)).payoff_help} def is_displayed(self): return self.group.second_divide_needed == True and self.group.first_choice == self.group.trim_piece and \ self.group.trim_piece == 2 and self.player.id_in_group == 2 and self.round_number <= 5 class trimcut_p2_trimpiece_2_fulifo(Page): form_model = 'group' form_fields =['trimcut_1', 'trimcut_2'] def vars_for_template(self): return {'R': self.round_number,'S':int(self.player.value_trimmings/3),'P': self.player.in_round(max(1, self.round_number - 1)).payoff_help} def is_displayed(self): return self.group.second_divide_needed == True and self.group.first_choice == self.group.trim_piece and \ self.group.trim_piece == 2 and self.player.id_in_group == 2 and self.round_number > 5 class trimcut_p2_trimpiece_3(Page): form_model = 'group' form_fields =['trimcut_1', 'trimcut_2'] def vars_for_template(self): return {'R': self.round_number,'S':int(self.player.value_trimmings/3),'P': self.player.in_round(max(1, self.round_number - 1)).payoff_help} def is_displayed(self): return self.group.second_divide_needed == True and self.group.first_choice == self.group.trim_piece and \ self.group.trim_piece == 3 and self.player.id_in_group == 2 and self.round_number <= 5 class trimcut_p2_trimpiece_3_fulifo(Page): form_model = 'group' form_fields =['trimcut_1', 'trimcut_2'] def vars_for_template(self): return {'R': self.round_number,'S':int(self.player.value_trimmings/3),'P': self.player.in_round(max(1, self.round_number - 1)).payoff_help} def is_displayed(self): return self.group.second_divide_needed == True and self.group.first_choice == self.group.trim_piece and \ self.group.trim_piece == 3 and self.player.id_in_group == 2 and self.round_number > 5 class trimcut_p3_trimpiece_1(Page): form_model = 'group' form_fields =['trimcut_1', 'trimcut_2'] def vars_for_template(self): return {'R': self.round_number,'S':int(self.player.value_trimmings/3),'P': self.player.in_round(max(1, self.round_number - 1)).payoff_help} def is_displayed(self): return self.group.second_divide_needed == True and self.group.first_choice != self.group.trim_piece and \ self.group.trim_piece == 1 and self.player.id_in_group == 3 and self.round_number <= 5 class trimcut_p3_trimpiece_1_fulifo(Page): form_model = 'group' form_fields =['trimcut_1', 'trimcut_2'] def vars_for_template(self): return {'R': self.round_number,'S':int(self.player.value_trimmings/3),'P': self.player.in_round(max(1, self.round_number - 1)).payoff_help} def is_displayed(self): return self.group.second_divide_needed == True and self.group.first_choice != self.group.trim_piece and \ self.group.trim_piece == 1 and self.player.id_in_group == 3 and self.round_number > 5 class trimcut_p3_trimpiece_2(Page): form_model = 'group' form_fields = ['trimcut_1', 'trimcut_2'] def vars_for_template(self): return {'R': self.round_number,'S':int(self.player.value_trimmings/3),'P': self.player.in_round(max(1, self.round_number - 1)).payoff_help} def is_displayed(self): return self.group.second_divide_needed == True and self.group.first_choice != self.group.trim_piece and \ self.group.trim_piece == 2 and self.player.id_in_group == 3 and self.round_number <= 5 class trimcut_p3_trimpiece_2_fulifo(Page): form_model = 'group' form_fields = ['trimcut_1', 'trimcut_2'] def vars_for_template(self): return {'R': self.round_number,'S':int(self.player.value_trimmings/3),'P': self.player.in_round(max(1, self.round_number - 1)).payoff_help} def is_displayed(self): return self.group.second_divide_needed == True and self.group.first_choice != self.group.trim_piece and \ self.group.trim_piece == 2 and self.player.id_in_group == 3 and self.round_number > 5 class trimcut_p3_trimpiece_3(Page): form_model = 'group' form_fields = ['trimcut_1', 'trimcut_2'] def vars_for_template(self): return {'R': self.round_number,'S':int(self.player.value_trimmings/3),'P': self.player.in_round(max(1, self.round_number - 1)).payoff_help} def is_displayed(self): return self.group.second_divide_needed == True and self.group.first_choice != self.group.trim_piece and \ self.group.trim_piece == 3 and self.player.id_in_group == 3 and self.round_number <= 5 class trimcut_p3_trimpiece_3_fulifo(Page): form_model = 'group' form_fields = ['trimcut_1', 'trimcut_2'] def vars_for_template(self): return {'R': self.round_number, 'S': int(self.player.value_trimmings / 3), 'P': self.player.in_round(max(1, self.round_number - 1)).payoff_help} def is_displayed(self): return self.group.second_divide_needed == True and self.group.first_choice != self.group.trim_piece and \ self.group.trim_piece == 3 and self.player.id_in_group == 3 and self.round_number > 5 class waitpage_5(WaitPage): def after_all_players_arrive(self): for player in self.group.get_players(): player.find_value_trimmings_1_2_3() class trimmings_first_choose_p2(Page): form_model = 'group' form_fields = ['trimmings_first_choose'] def vars_for_template(self): return {'R': self.round_number,'P': self.player.in_round(max(1, self.round_number - 1)).payoff_help} def is_displayed(self): return self.group.second_divide_needed == True and self.group.first_choice != self.group.trim_piece and self.player.id_in_group == 2 class trimmings_first_choose_p3(Page): form_model = 'group' form_fields = ['trimmings_first_choose'] def vars_for_template(self): return {'R': self.round_number,'P': self.player.in_round(max(1, self.round_number - 1)).payoff_help} def is_displayed(self): return self.group.second_divide_needed == True and self.group.first_choice == self.group.trim_piece and self.player.id_in_group == 3 class waitpage_6(WaitPage): def after_all_players_arrive(self): self.group.set_trimmings_second_third_choose() for player in self.group.get_players(): player.get_payoff() for player in self.group.get_players(): player.set_opponent_value() for player in self.group.get_players(): player.set_envy() for player in self.group.get_players(): player.score_calculation() class trimmings_second_choose_1(Page): timeout_seconds = 20 def vars_for_template(self): return {'R': self.round_number,'P': self.player.in_round(max(1, self.round_number - 1)).payoff_help} def is_displayed(self): return self.group.second_divide_needed == True and self.group.trimmings_second_choose == 1 and self.player.id_in_group == 1 class trimmings_second_choose_2(Page): timeout_seconds = 20 def vars_for_template(self): return {'R': self.round_number,'P': self.player.in_round(max(1, self.round_number - 1)).payoff_help} def is_displayed(self): return self.group.second_divide_needed == True and self.group.trimmings_second_choose == 2 and self.player.id_in_group == 1 class trimmings_second_choose_3(Page): timeout_seconds = 20 def vars_for_template(self): return {'R': self.round_number,'P': self.player.in_round(max(1, self.round_number - 1)).payoff_help} def is_displayed(self): return self.group.second_divide_needed == True and self.group.trimmings_second_choose == 3 and self.player.id_in_group == 1 class trimmings_third_choose_p3_1(Page): timeout_seconds = 20 def vars_for_template(self): return {'R': self.round_number,'P': self.player.in_round(max(1, self.round_number - 1)).payoff_help} def is_displayed(self): return self.group.second_divide_needed == True and self.group.first_choice != self.group.trim_piece and \ self.group.trimmings_third_choose == 1 and self.player.id_in_group == 3 class trimmings_third_choose_p3_2(Page): timeout_seconds = 20 def vars_for_template(self): return {'R': self.round_number,'P': self.player.in_round(max(1, self.round_number - 1)).payoff_help} def is_displayed(self): return self.group.second_divide_needed == True and self.group.first_choice != self.group.trim_piece and \ self.group.trimmings_third_choose == 2 and self.player.id_in_group == 3 class trimmings_third_choose_p3_3(Page): timeout_seconds = 20 def vars_for_template(self): return {'R': self.round_number,'P': self.player.in_round(max(1, self.round_number - 1)).payoff_help} def is_displayed(self): return self.group.second_divide_needed == True and self.group.first_choice != self.group.trim_piece and \ self.group.trimmings_third_choose == 3 and self.player.id_in_group == 3 class trimmings_third_choose_p2_1(Page): timeout_seconds = 20 def vars_for_template(self): return {'R': self.round_number,'P': self.player.in_round(max(1, self.round_number - 1)).payoff_help} def is_displayed(self): return self.group.second_divide_needed == True and self.group.first_choice == self.group.trim_piece and \ self.group.trimmings_third_choose == 1 and self.player.id_in_group == 2 class trimmings_third_choose_p2_2(Page): timeout_seconds = 20 def vars_for_template(self): return {'R': self.round_number,'P': self.player.in_round(max(1, self.round_number - 1)).payoff_help} def is_displayed(self): return self.group.second_divide_needed == True and self.group.first_choice == self.group.trim_piece and \ self.group.trimmings_third_choose == 2 and self.player.id_in_group == 2 class trimmings_third_choose_p2_3(Page): timeout_seconds = 20 def vars_for_template(self): return {'R': self.round_number,'P': self.player.in_round(max(1, self.round_number - 1)).payoff_help} def is_displayed(self): return self.group.second_divide_needed == True and self.group.first_choice == self.group.trim_piece and \ self.group.trimmings_third_choose == 3 and self.player.id_in_group == 2 class Roundresult_skip_P1(Page): timeout_seconds = 30 def vars_for_template(self): return {'R': self.round_number} def is_displayed(self): return self.player.id_in_group == 1 and self.group.second_divide_needed == False class Roundresult_skip_P2(Page): timeout_seconds = 30 def vars_for_template(self): return {'R': self.round_number} def is_displayed(self): return self.player.id_in_group == 2 and self.group.second_divide_needed == False class Roundresult_skip_P3(Page): timeout_seconds = 30 def vars_for_template(self): return {'R': self.round_number} def is_displayed(self): return self.player.id_in_group == 3 and self.group.second_divide_needed == False class Roundresult_noskip_P1(Page): timeout_seconds = 30 def vars_for_template(self): return {'R': self.round_number} def is_displayed(self): return self.player.id_in_group == 1 and self.group.second_divide_needed == True class Roundresult_noskip_P2(Page): timeout_seconds = 30 def vars_for_template(self): return {'R': self.round_number} def is_displayed(self): return self.player.id_in_group == 2 and self.group.second_divide_needed == True class Roundresult_noskip_P3(Page): timeout_seconds = 30 def vars_for_template(self): return {'R': self.round_number} def is_displayed(self): return self.player.id_in_group == 3 and self.group.second_divide_needed == True class finished(Page): timeout_seconds = 15 def is_displayed(self): return self.round_number == 7 page_sequence = [ greetings_P1, greetings_P2, greetings_P3, firstcut_p1, firstcut_p1_fulifo, waitpage_1, trim_piece1, trim_piece1_fulifo, trim_piece2, trim_piece2_fulifo, trim_piece3, trim_piece3_fulifo, waitpage_2, first_choose, first_choose_full_info, waitpage_3, second_choose_without_1, second_choose_without_2, second_choose_without_3, waitpage_4, second_choose_automatic_1, second_choose_automatic_2, second_choose_automatic_3, third_choose_1, third_choose_2, third_choose_3, trimcut_p2_trimpiece_1, trimcut_p2_trimpiece_1_fulifo, trimcut_p2_trimpiece_2, trimcut_p2_trimpiece_2_fulifo, trimcut_p2_trimpiece_3, trimcut_p2_trimpiece_3_fulifo, trimcut_p3_trimpiece_1, trimcut_p3_trimpiece_1_fulifo, trimcut_p3_trimpiece_2, trimcut_p3_trimpiece_2_fulifo, trimcut_p3_trimpiece_3, trimcut_p3_trimpiece_3_fulifo, waitpage_5, trimmings_first_choose_p2, trimmings_first_choose_p3, waitpage_6, trimmings_second_choose_1, trimmings_second_choose_2, trimmings_second_choose_3, trimmings_third_choose_p2_1, trimmings_third_choose_p2_2, trimmings_third_choose_p2_3, trimmings_third_choose_p3_1, trimmings_third_choose_p3_2, trimmings_third_choose_p3_3, Roundresult_skip_P1, Roundresult_skip_P2, Roundresult_skip_P3, Roundresult_noskip_P1, Roundresult_noskip_P2, Roundresult_noskip_P3, finished, ]