from otree.api import Currency as c, currency_range from . import models from ._builtin import Page, WaitPage from .models import Constants from math import atan, degrees, sqrt, tan, pi #from django.utils import translation #from django import http #from django.conf import settings from math import atan, degrees, sqrt, tan, pi from .utils import compute_line, intersection_point, distance, max_tuple class Informed_Consent(Page): form_model = 'player' form_fields = ['IC1'] def is_displayed(player): return player.round_number == 1 def error_message(self, values): if values['IC1'] != "I consent to participating in this study": return 'Please agree with the informed consent to continue with the experiment.' class Personal_ID(Page): form_model = 'player' form_fields = ['personal_ID'] def is_displayed(player): return player.round_number == 1 def before_next_page(self): self.participant.vars['personal_ID'] = self.player.personal_ID print("personal_ID") # print(self.player.personal_ID) print(self.participant.vars['personal_ID']) class Welcome(Page): def is_displayed(player): return player.round_number == 1 class BankInfo(Page): form_model = 'player' form_fields = ['Credits', 'Student_number', 'Bank_account_name', 'Street', 'House_number', 'Postal_code', 'City', 'CountryBank', 'IBAN', 'emailadress'] # form_fields = ['Credits', 'Student_number', 'Bank', 'Bank_account_name', 'Street', 'House_number', 'Postal_code', 'City', 'CountryBank', 'IBAN', 'emailadress', 'BSN', 'date_of_birth'] def is_displayed(player): return player.round_number == 1 def before_next_page(self): self.participant.vars['Credits'] = self.player.Credits print("payment") # print(self.player.Credits) print(self.participant.vars['Credits']) class Start(Page): def is_displayed(player): return player.round_number == 1 #SVO = Task1 class Task1_Instructions(Page): def is_displayed(player): return player.round_number == player.participant.vars['SVO_round'][0] class Task1(Page): form_model = 'player' form_fields = ['choice'] def is_displayed(player): return player.round_number == player.participant.vars['SVO_round'][0] or player.round_number == player.participant.vars['SVO_round'][1] or player.round_number == player.participant.vars['SVO_round'][2] or player.round_number == player.participant.vars['SVO_round'][3] or player.round_number == player.participant.vars['SVO_round'][4] or player.round_number == player.participant.vars['SVO_round'][5] or player.round_number == player.participant.vars['SVO_round'][6] or player.round_number == player.participant.vars['SVO_round'][7] or player.round_number == player.participant.vars['SVO_round'][8] or player.round_number == player.participant.vars['SVO_round'][9] or player.round_number == player.participant.vars['SVO_round'][10] or player.round_number == player.participant.vars['SVO_round'][11] or player.round_number == player.participant.vars['SVO_round'][12] or player.round_number == player.participant.vars['SVO_round'][13] or player.round_number == player.participant.vars['SVO_round'][14] def js_vars(player): if player.round_number == player.participant.vars['SVO_round'][0]: player.round_number_svo = 1 return dict(rows=Constants.ROWS[player.round_number_svo]) if player.round_number == player.participant.vars['SVO_round'][1]: player.round_number_svo = 2 return dict(rows=Constants.ROWS[player.round_number_svo]) if player.round_number == player.participant.vars['SVO_round'][2]: player.round_number_svo = 3 return dict(rows=Constants.ROWS[player.round_number_svo]) if player.round_number == player.participant.vars['SVO_round'][3]: player.round_number_svo = 4 return dict(rows=Constants.ROWS[player.round_number_svo]) if player.round_number == player.participant.vars['SVO_round'][4]: player.round_number_svo = 5 return dict(rows=Constants.ROWS[player.round_number_svo]) if player.round_number == player.participant.vars['SVO_round'][5]: player.round_number_svo = 6 return dict(rows=Constants.ROWS[player.round_number_svo]) if player.round_number == player.participant.vars['SVO_round'][6]: player.round_number_svo = 7 return dict(rows=Constants.ROWS[player.round_number_svo]) if player.round_number == player.participant.vars['SVO_round'][7]: player.round_number_svo = 8 return dict(rows=Constants.ROWS[player.round_number_svo]) if player.round_number == player.participant.vars['SVO_round'][8]: player.round_number_svo = 9 return dict(rows=Constants.ROWS[player.round_number_svo]) if player.round_number == player.participant.vars['SVO_round'][9]: player.round_number_svo = 10 return dict(rows=Constants.ROWS[player.round_number_svo]) if player.round_number == player.participant.vars['SVO_round'][10]: player.round_number_svo = 11 return dict(rows=Constants.ROWS[player.round_number_svo]) if player.round_number == player.participant.vars['SVO_round'][11]: player.round_number_svo = 12 return dict(rows=Constants.ROWS[player.round_number_svo]) if player.round_number == player.participant.vars['SVO_round'][12]: player.round_number_svo = 13 return dict(rows=Constants.ROWS[player.round_number_svo]) if player.round_number == player.participant.vars['SVO_round'][13]: player.round_number_svo = 14 return dict(rows=Constants.ROWS[player.round_number_svo]) if player.round_number == player.participant.vars['SVO_round'][14]: player.round_number_svo = 15 return dict(rows=Constants.ROWS[player.round_number_svo]) def before_next_page(self): if self.player.round_number == self.player.participant.vars['SVO_round'][0]: self.player.round_number_svo = 1 row = Constants.ROWS[self.player.round_number_svo][self.player.choice] if self.player.round_number == self.player.participant.vars['SVO_round'][1]: self.player.round_number_svo = 2 row = Constants.ROWS[self.player.round_number_svo][self.player.choice] if self.player.round_number == self.player.participant.vars['SVO_round'][2]: self.player.round_number_svo = 3 row = Constants.ROWS[self.player.round_number_svo][self.player.choice] if self.player.round_number == self.player.participant.vars['SVO_round'][3]: self.player.round_number_svo = 4 row = Constants.ROWS[self.player.round_number_svo][self.player.choice] if self.player.round_number == self.player.participant.vars['SVO_round'][4]: self.player.round_number_svo = 5 row = Constants.ROWS[self.player.round_number_svo][self.player.choice] if self.player.round_number == self.player.participant.vars['SVO_round'][5]: self.player.round_number_svo = 6 row = Constants.ROWS[self.player.round_number_svo][self.player.choice] if self.player.round_number == self.player.participant.vars['SVO_round'][6]: self.player.round_number_svo = 7 row = Constants.ROWS[self.player.round_number_svo][self.player.choice] if self.player.round_number == self.player.participant.vars['SVO_round'][7]: self.player.round_number_svo = 8 row = Constants.ROWS[self.player.round_number_svo][self.player.choice] if self.player.round_number == self.player.participant.vars['SVO_round'][8]: self.player.round_number_svo = 9 row = Constants.ROWS[self.player.round_number_svo][self.player.choice] if self.player.round_number == self.player.participant.vars['SVO_round'][9]: self.player.round_number_svo = 10 row = Constants.ROWS[self.player.round_number_svo][self.player.choice] if self.player.round_number == self.player.participant.vars['SVO_round'][10]: self.player.round_number_svo = 11 row = Constants.ROWS[self.player.round_number_svo][self.player.choice] if self.player.round_number == self.player.participant.vars['SVO_round'][11]: self.player.round_number_svo = 12 row = Constants.ROWS[self.player.round_number_svo][self.player.choice] if self.player.round_number == self.player.participant.vars['SVO_round'][12]: self.player.round_number_svo = 13 row = Constants.ROWS[self.player.round_number_svo][self.player.choice] if self.player.round_number == self.player.participant.vars['SVO_round'][13]: self.player.round_number_svo = 14 row = Constants.ROWS[self.player.round_number_svo][self.player.choice] if self.player.round_number == self.player.participant.vars['SVO_round'][14]: self.player.round_number_svo = 15 row = Constants.ROWS[self.player.round_number_svo][self.player.choice] if self.player.round_number == self.player.participant.vars['SVO_round'][0]: to_self_total = 0 to_other_total = 0 self.participant.vars['to_self_secondary'] = 0 self.participant.vars['to_other_secondary'] = 0 self.player.to_self = row['to_self'] self.player.to_other = row['to_other'] self.participant.vars['to_self'] = row['to_self'] self.participant.vars['to_other'] = row['to_other'] self.player.to_self_total = row['to_self'] self.player.to_other_total = row['to_other'] self.participant.vars['to_self_primary'] = row['to_self'] self.participant.vars['to_other_primary'] = row['to_other'] self.participant.vars['to_self_total'] = row['to_self'] self.participant.vars['to_other_total'] = row['to_other'] if self.round_number > self.participant.vars['SVO_round'][0]: self.player.to_self = row['to_self'] self.player.to_other = row['to_other'] self.player.to_self_total = self.participant.vars['to_self_total'] self.player.to_other_total = self.participant.vars['to_other_total'] self.participant.vars['to_self'] = row['to_self'] self.participant.vars['to_other'] = row['to_other'] self.participant.vars['to_self_total'] = row['to_self'] + self.player.to_self_total self.participant.vars['to_other_total'] = row['to_other'] + self.player.to_other_total if self.player.round_number_svo > 1 and self.player.round_number_svo < 7: self.player.to_self_primary = self.participant.vars['to_self_primary'] self.player.to_other_primary = self.participant.vars['to_other_primary'] self.participant.vars['to_self_primary'] = row['to_self'] + self.player.to_self_primary self.participant.vars['to_other_primary'] = row['to_other'] + self.player.to_other_primary if self.player.round_number_svo > 1 and self.player.round_number_svo > 6: self.player.to_self_secondary = self.participant.vars['to_self_secondary'] self.player.to_other_secondary = self.participant.vars['to_other_secondary'] self.participant.vars['to_self_secondary'] = row['to_self'] + self.player.to_self_secondary self.participant.vars['to_other_secondary'] = row['to_other'] + self.player.to_other_secondary print("svo per round") print(self.participant.vars['to_self']) print(self.participant.vars['to_other']) print("svo primary") print(self.participant.vars['to_self_primary']) print(self.participant.vars['to_other_primary']) print("svo secondary") print(self.participant.vars['to_self_secondary']) print(self.participant.vars['to_other_secondary']) print("svo total") print(self.participant.vars['to_self_total']) print(self.participant.vars['to_other_total']) if self.round_number == self.participant.vars['SVO_round'][14]: import math participant = self.player.participant # to_self_total = self.participant.vars['to_self_total'] # to_other_total = self.participant.vars['to_other_total'] to_self_total = self.participant.vars['to_self_primary'] to_other_total = self.participant.vars['to_other_primary'] avg_self = to_self_total / 6 avg_other = to_other_total / 6 radians = math.atan((avg_other - 50) / (avg_self - 50)) self.player.svo_angle = round(math.degrees(radians), 2) self.participant.vars['svo_angle'] = self.player.svo_angle if self.player.svo_angle < -12.04: self.player.svo_category = 'Competitive' if self.player.svo_angle >= -12.04: self.player.svo_category = 'Individualistic' if self.player.svo_angle >= 22.45: self.player.svo_category = 'Prosocial' if self.player.svo_angle > 57.15: self.player.svo_category = 'Altruistic' self.participant.vars['svo_category'] = self.player.svo_category print("svo_angle") print(self.player.svo_angle) print("svo_category") print(self.player.svo_category) class Task1_Finished(Page): def is_displayed(player): return player.round_number == player.participant.vars['SVO_round'][14] #SDO = Questionnaire class Questionnaire(Page): form_model = 'player' def get_form_fields(self): import random form_fields = ["SDO_1", "SDO_2", "SDO_3", "SDO_4", "SDO_5", "SDO_6", "SDO_7", "SDO_8"] random.shuffle(form_fields) return form_fields def is_displayed(player): print("SDO round") print(player.participant.vars['SDO_round']) return player.round_number == player.participant.vars['SDO_round'] def before_next_page(self): self.participant.vars['SDO_1'] = self.player.SDO_1 self.participant.vars['SDO_2'] = self.player.SDO_2 self.participant.vars['SDO_3'] = self.player.SDO_3 self.participant.vars['SDO_4'] = self.player.SDO_4 self.participant.vars['SDO_5'] = self.player.SDO_5 self.participant.vars['SDO_6'] = self.player.SDO_6 self.participant.vars['SDO_7'] = self.player.SDO_7 self.participant.vars['SDO_8'] = self.player.SDO_8 #RuleFollowing = Task2 class Task2_Instructions(Page): def is_displayed(player): return player.round_number == player.participant.vars['RuleFollowing_round'] class Task2(Page): form_model = 'player' form_fields = ['bucket_blue_balls', 'bucket_yellow_balls'] def is_displayed(player): return player.round_number == player.participant.vars['RuleFollowing_round'] class Task2_Finished(Page): def is_displayed(player): return player.round_number == player.participant.vars['RuleFollowing_round'] def vars_for_template(self): print('bucket_blue_balls') print(self.player.bucket_blue_balls) print('bucket_yellow_balls') print(self.player.bucket_yellow_balls) self.participant.vars['bucket_blue_balls'] = self.player.bucket_blue_balls self.participant.vars['bucket_yellow_balls'] = self.player.bucket_yellow_balls self.participant.vars['earnings_rulefollowing'] = (self.player.bucket_blue_balls * 0.05) + (self.player.bucket_yellow_balls * 0.10) print("earnings_rulefollowing") print(self.participant.vars['earnings_rulefollowing']) self.player.earnings_rulefollowing = self.participant.vars['earnings_rulefollowing'] #CoinToss = Task3 class Task3_Instructions(Page): def is_displayed(player): return player.round_number == player.participant.vars['CoinToss_round'][0] class Task3_Predict(Page): def is_displayed(player): return player.round_number == player.participant.vars['CoinToss_round'][0] or player.round_number == player.participant.vars['CoinToss_round'][1] or player.round_number == player.participant.vars['CoinToss_round'][2] or player.round_number == player.participant.vars['CoinToss_round'][3] or player.round_number == player.participant.vars['CoinToss_round'][4] or player.round_number == player.participant.vars['CoinToss_round'][5] or player.round_number == player.participant.vars['CoinToss_round'][6] or player.round_number == player.participant.vars['CoinToss_round'][7] or player.round_number == player.participant.vars['CoinToss_round'][8] or player.round_number == player.participant.vars['CoinToss_round'][9] or player.round_number == player.participant.vars['CoinToss_round'][10] or player.round_number == player.participant.vars['CoinToss_round'][11] or player.round_number == player.participant.vars['CoinToss_round'][12] or player.round_number == player.participant.vars['CoinToss_round'][13] or player.round_number == player.participant.vars['CoinToss_round'][14] class Task3_Result(Page): form_model = 'player' form_fields = ['coint_toss'] def vars_for_template(self): import random self.player.random_coinflip = random.choice(['HEADS', 'TAILS']) if self.round_number == self.participant.vars['CoinToss_round'][0]: self.player.num_HEADS = 0 if self.player.random_coinflip == 'HEADS': self.player.num_HEADS = 1 self.participant.vars['num_HEADS'] = 1 if self.round_number > self.participant.vars['CoinToss_round'][0]: if self.player.random_coinflip == 'HEADS': self.player.num_HEADS = self.participant.vars['num_HEADS'] + 1 else: self.player.num_HEADS = self.participant.vars['num_HEADS'] self.participant.vars['num_HEADS'] = self.player.num_HEADS print("num_HEADS") print(self.participant.vars['num_HEADS']) # print(self.player.random_coinflip) def before_next_page(self): # print('coint_toss') # print(self.player.coint_toss) if self.round_number > self.participant.vars['CoinToss_round'][0]: self.player.earnings_cointoss = self.participant.vars['earnings_cointoss'] if self.player.coint_toss == 1: if self.round_number == self.participant.vars['CoinToss_round'][0]: self.participant.vars['earnings_cointoss'] = 0.1 else: self.participant.vars['earnings_cointoss'] = self.player.earnings_cointoss + 0.1 else: if self.round_number == self.participant.vars['CoinToss_round'][0]: self.participant.vars['earnings_cointoss'] = 0 else: self.participant.vars['earnings_cointoss'] = self.player.earnings_cointoss print("earnings_cointoss") print(self.participant.vars['earnings_cointoss']) def is_displayed(player): return player.round_number == player.participant.vars['CoinToss_round'][0] or player.round_number == player.participant.vars['CoinToss_round'][1] or player.round_number == player.participant.vars['CoinToss_round'][2] or player.round_number == player.participant.vars['CoinToss_round'][3] or player.round_number == player.participant.vars['CoinToss_round'][4] or player.round_number == player.participant.vars['CoinToss_round'][5] or player.round_number == player.participant.vars['CoinToss_round'][6] or player.round_number == player.participant.vars['CoinToss_round'][7] or player.round_number == player.participant.vars['CoinToss_round'][8] or player.round_number == player.participant.vars['CoinToss_round'][9] or player.round_number == player.participant.vars['CoinToss_round'][10] or player.round_number == player.participant.vars['CoinToss_round'][11] or player.round_number == player.participant.vars['CoinToss_round'][12] or player.round_number == player.participant.vars['CoinToss_round'][13] or player.round_number == player.participant.vars['CoinToss_round'][14] class Task3_Finished(Page): def is_displayed(player): return player.round_number == player.participant.vars['CoinToss_round'][14] def vars_for_template(self): self.player.earnings_cointoss = self.participant.vars['earnings_cointoss'] self.participant.vars['earnings_cointoss'] = self.player.earnings_cointoss class Demographics(Page): form_model = 'player' form_fields = ['gender', 'age', 'political_orientation', 'social_ideology', 'economic_ideology'] def is_displayed(player): return player.round_number == 33 def error_message(self, values): if (values["age"] < 0): return 'Please enter your age' class End(Page): def is_displayed(player): return player.round_number == 34 def vars_for_template(self): self.player.to_self_primary = self.participant.vars['to_self_primary'] self.player.to_other_primary = self.participant.vars['to_other_primary'] self.player.to_self_secondary = self.participant.vars['to_self_secondary'] self.player.to_other_secondary = self.participant.vars['to_other_secondary'] self.player.to_self_total = self.participant.vars['to_self_total'] self.player.to_other_total = self.participant.vars['to_other_total'] self.player.to_self_total_earn = self.participant.vars['to_self_total'] / 1455 * 0.75 self.player.to_other_total_earn = self.participant.vars['to_other_total'] / 1420 * 0.75 self.player.svo_angle = self.participant.vars['svo_angle'] self.player.svo_category = self.participant.vars['svo_category'] # self.player.svo_inequalityaversion = self.participant.vars['svo_inequalityaversion'] self.player.bucket_blue_balls = self.participant.vars['bucket_blue_balls'] self.player.bucket_yellow_balls = self.participant.vars['bucket_yellow_balls'] self.player.earnings_rulefollowing = self.participant.vars['earnings_rulefollowing'] self.player.num_HEADS = self.participant.vars['num_HEADS'] self.player.earnings_cointoss = self.participant.vars['earnings_cointoss'] self.player.SDO_1 = self.participant.vars['SDO_1'] self.player.SDO_2 = self.participant.vars['SDO_2'] self.player.SDO_3 = self.participant.vars['SDO_3'] self.player.SDO_4 = self.participant.vars['SDO_4'] self.player.SDO_5 = self.participant.vars['SDO_5'] self.player.SDO_6 = self.participant.vars['SDO_6'] self.player.SDO_7 = self.participant.vars['SDO_7'] self.player.SDO_8 = self.participant.vars['SDO_8'] page_sequence = [ Informed_Consent, Personal_ID, Welcome, BankInfo, Start, Questionnaire, Task1_Instructions, Task1, Task1_Finished, Task2_Instructions, Task2, Task2_Finished, Task3_Instructions, Task3_Predict, Task3_Result, Task3_Finished, Demographics, End ]