from otree.api import Currency as c, currency_range from ._builtin import Page, WaitPage from .models import Constants import random class Instructions(Page): def is_displayed(self): print(self.round_number) return self.player.is_treatment == 'control' and self.round_number == 1 class Instructions2(Page): def is_displayed(self): print(self.round_number) return self.player.is_treatment == 'treatment' and self.round_number == 1 class Keep_Portfolio(Page): form_model = 'player' form_fields = ['keep_portfolio'] def is_displayed(self): return (self.player.is_treatment == 'control' and self.round_number in (2, 3, 4, 5, 6, 7, 8)) or \ (self.player.is_treatment == 'treatment' and self.round_number in (2, 3, 4)) def vars_for_template(self): previous_data = self.player.in_round(self.round_number - 1) option_1 = previous_data.earning_A option_2 = previous_data.earning_B # budget = previous_data.payoff # option_1 = int(budget * previous_data.option_1 / \ # (previous_data.option_1 + previous_data.option_2)) # option_2 = int(budget - option_1) return { 'option_1': option_1, 'option_2': option_2, 'budget': f"{option_1 + option_2}" } class Keep_Portfolio2(Page): form_model = 'player' form_fields = ['keep_portfolio'] def is_displayed(self): return self.player.is_treatment == 'treatment' and self.round_number in (6, 7, 8) def vars_for_template(self): previous_data = self.player.in_round(self.round_number - 1) option_1 = previous_data.earning_A option_2 = previous_data.earning_B option_3 = previous_data.earning_C # budget = previous_data.payoff # option_1 = int(budget * previous_data.option_1 / \ # (previous_data.option_1 + previous_data.option_2 + previous_data.option_3)) # option_2 = int(budget * previous_data.option_2 / \ # (previous_data.option_1 + previous_data.option_2 + previous_data.option_3)) # option_3 = int(budget - option_1 - option_2) return { 'option_1': option_1, 'option_2': option_2, 'option_3': option_3, 'budget': f"{option_1 + option_2 + option_3}" } class Choices(Page): form_model = 'player' form_fields = ['option_1', 'option_2'] def is_displayed(self): return not self.player.keep_portfolio and \ (self.player.is_treatment == 'control' or \ (self.player.is_treatment == 'treatment' and self.round_number in (1, 2, 3, 4))) def error_message(self, values): print('values is', values) # if self.round_number == 1: # budget = 100 # else: # budget = self.player.in_round(self.round_number - 1).custom_payoff # values['keep_portfolio'] == "False" and ( if values['option_1'] + values['option_2'] != 100: return f"Dağılım %100'den eksik veya fazla olamaz." def vars_for_template(self): if self.round_number == 1: budget = 100 else: budget = self.player.in_round(self.round_number - 1).custom_payoff return { 'budget': budget } class Choices2(Page): form_model = 'player' form_fields = ['option_1', 'option_2', 'option_3'] def is_displayed(self): return not self.player.keep_portfolio and \ self.player.is_treatment == 'treatment' and \ (self.round_number in (5, 6, 7, 8)) def error_message(self, values): # budget = self.player.in_round(self.round_number - 1).custom_payoff if values['option_1'] + values['option_2'] + values['option_3'] != 100: return f"Dağılım %100'den eksik veya fazla olamaz." def vars_for_template(self): budget = self.player.in_round(self.round_number - 1).custom_payoff return { 'budget': budget } class Results(Page): form_model = 'player' def is_displayed(self): return self.player.is_treatment == 'control' or \ (self.player.is_treatment == 'treatment' and self.round_number in (1, 2, 3, 4 )) def vars_for_template(self): if self.round_number != 1: if self.player.keep_portfolio: previous_data = self.player.in_round(self.round_number - 1) self.player.option_1 = previous_data.earning_A self.player.option_2 = previous_data.earning_B # if self.player.keep_portfolio: # self.player.option_1 = int(previous_data.payoff * previous_data.option_1 / \ # (previous_data.option_1 + previous_data.option_2)) # self.player.option_2 = int(previous_data.payoff - self.player.option_1) self.player.set_payoffs() if self.round_number == 1: budget = 100 else: budget = self.player.in_round(self.round_number - 1).custom_payoff return { 'rand_num': '{}'.format(self.player.rand_num), 'earning_A': '{}'.format(self.player.earning_A), 'earning_B': '{}'.format(self.player.earning_B), 'invest_A': '{}'.format(self.player.option_1), 'invest_B': '{}'.format(self.player.option_2) } class Results2(Page): def is_displayed(self): return self.player.is_treatment == 'treatment' and \ (self.round_number in (5, 6, 7, 8)) def vars_for_template(self): if self.player.keep_portfolio: previous_data = self.player.in_round(self.round_number - 1) self.player.option_1 = previous_data.earning_A self.player.option_2 = previous_data.earning_B self.player.option_3 = previous_data.earning_C # self.player.option_1 = int(previous_data.payoff * previous_data.option_1 / \ # (previous_data.option_1 + previous_data.option_2 + previous_data.option_3)) # self.player.option_2 = int(previous_data.payoff * previous_data.option_2 / \ # (previous_data.option_1 + previous_data.option_2 + previous_data.option_3)) # self.player.option_3 = int(previous_data.payoff - self.player.option_1 - self.player.option_2) self.player.set_payoffs() if self.round_number == 1: budget = 100 else: budget = self.player.in_round(self.round_number - 1).custom_payoff return { 'rand_num': '{}'.format(self.player.rand_num), 'earning_A': '{}'.format(self.player.earning_A), 'earning_B': '{}'.format(self.player.earning_B), 'earning_C': '{}'.format(self.player.earning_C), 'invest_A': '{}'.format(self.player.option_1), 'invest_B': '{}'.format(self.player.option_2), 'invest_C': '{}'.format(self.player.option_3) } class OverallResults(Page): """This page displays the end of game data """ def is_displayed(self): return self.round_number == Constants.num_rounds def vars_for_template(self): last_payoff = self.player.custom_payoff return { 'overall_earnings': last_payoff } page_sequence = ( Instructions, Instructions2, Keep_Portfolio, Keep_Portfolio2, Choices, Choices2, Results, Results2, OverallResults )