from django.db.models import F from otree.api import Currency as c, currency_range from . import models from ._builtin import Page, WaitPage from .models import Constants import random import math import itertools from decimal import * def vars_for_all_templates(self): return { 'condition': self.participant.vars['condition'], } class IC(Page): form_model = models.Player form_fields = ['informed_consent'] def before_next_page(self): # See if that worker ID already appears in players, in which case they at least started the experiment mturk_check = models.Player.objects.filter( worker_id=self.participant.label) if not mturk_check: self.player.mturk_dupe = 0 else: self.player.mturk_dupe = 1 # Bring worker ID into player table/model for accessibility, which will be captured via the participant # label in the URL. Updating for this participant so that if they try again, they'll fail the dupe check. # Worker_Id has a default of 'e,' so for testing outside of MTurk just need to keep it at 'e' if there is no # participant label coming from the URL if not self.participant.label: self.player.worker_id = 'e' else: self.player.worker_id = self.participant.label # Also store condition in the player table just for ease of data analysis self.player.condition = self.participant.vars["condition"] # self.player.participant_number = self.player.id class IC_Decline(Page): def is_displayed(self): return self.player.informed_consent == "No" class DuplicateWorker(Page): def is_displayed(self): return self.player.mturk_dupe == 1 class GenInstructions(Page): pass class Compensation(Page): pass class KnowledgeCheck(Page): form_model = models.Player def get_form_fields(self): if self.player.condition == 1: return ['kc1', 'kc2', 'kc3', 'kc4_bonus'] elif self.player.condition == 2: return ['kc1', 'kc2', 'kc3', 'kc4_penalty'] elif self.player.condition == 3: return ['kc1', 'kc2', 'kc3', 'kc4_both'] def before_next_page(self): # Might as well pick a pay period on the way in pay_choice = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10) self.player.pay_period = random.choice(pay_choice) if self.player.kc1 == "c": self.player.kc1_correct = 1 else: self.player.kc1_correct = 0 self.player.kc1_attempts += 1 self.player.kc_passed = 0 if self.player.kc2 == "b": self.player.kc2_correct = 1 else: self.player.kc2_correct = 0 self.player.kc2_attempts += 1 self.player.kc_passed = 0 if self.player.condition == 1: if self.player.kc3 == "b": self.player.kc3_correct = 1 else: self.player.kc3_correct = 0 self.player.kc3_attempts += 1 self.player.kc_passed = 0 if self.player.kc4_bonus == "a": self.player.kc4_correct = 1 else: self.player.kc4_correct = 0 self.player.kc4_attempts += 1 self.player.kc_passed = 0 elif self.player.condition == 2: if self.player.kc3 == "d": self.player.kc3_correct = 1 else: self.player.kc3_correct = 0 self.player.kc3_attempts += 1 self.player.kc_passed = 0 if self.player.kc4_penalty == "a": self.player.kc4_correct = 1 else: self.player.kc4_correct = 0 self.player.kc4_attempts += 1 self.player.kc_passed = 0 elif self.player.condition == 3: if self.player.kc3 == "c": self.player.kc3_correct = 1 else: self.player.kc3_correct = 0 self.player.kc3_attempts += 1 self.player.kc_passed = 0 if self.player.kc4_both == "a": self.player.kc4_correct = 1 else: self.player.kc4_correct = 0 self.player.kc4_attempts += 1 self.player.kc_passed = 0 class KnowledgeCheckResults(Page): form_model = models.Player def is_displayed(self): if self.player.kc_passed == 0: return True else: return False def get_form_fields(self): if self.player.condition == 1: return ['kc1', 'kc2', 'kc3', 'kc4_bonus'] elif self.player.condition == 2: return ['kc1', 'kc2', 'kc3', 'kc4_penalty'] elif self.player.condition == 3: return ['kc1', 'kc2', 'kc3', 'kc4_both'] def before_next_page(self): self.player.kc1 = "" self.player.kc2 = "" self.player.kc3 = "" self.player.kc4_bonus = "" self.player.kc4_penalty = "" self.player.kc4_both = "" class KnowledgeCheckSub(Page): form_model = models.Player def is_displayed(self): if self.player.kc_passed == 0: return True else: return False def get_form_fields(self): if self.player.condition == 1: return ['kc1', 'kc2', 'kc3', 'kc4_bonus'] elif self.player.condition == 2: return ['kc1', 'kc2', 'kc3', 'kc4_penalty'] elif self.player.condition == 3: return ['kc1', 'kc2', 'kc3', 'kc4_both'] def before_next_page(self): if self.player.kc1 == "c": self.player.kc1_correct = 1 else: self.player.kc1_correct = 0 self.player.kc1_attempts += 1 self.player.kc_passed = 0 if self.player.kc2 == "b": self.player.kc2_correct = 1 else: self.player.kc2_correct = 0 self.player.kc2_attempts += 1 self.player.kc_passed = 0 if self.player.condition == 1: if self.player.kc3 == "b": self.player.kc3_correct = 1 else: self.player.kc3_correct = 0 self.player.kc3_attempts += 1 self.player.kc_passed = 0 if self.player.kc4_bonus == "a": self.player.kc4_correct = 1 else: self.player.kc4_correct = 0 self.player.kc4_attempts += 1 self.player.kc_passed = 0 elif self.player.condition == 2: if self.player.kc3 == "d": self.player.kc3_correct = 1 else: self.player.kc3_correct = 0 self.player.kc3_attempts += 1 self.player.kc_passed = 0 if self.player.kc4_penalty == "a": self.player.kc4_correct = 1 else: self.player.kc4_correct = 0 self.player.kc4_attempts += 1 self.player.kc_passed = 0 elif self.player.condition == 3: if self.player.kc3 == "c": self.player.kc3_correct = 1 else: self.player.kc3_correct = 0 self.player.kc3_attempts += 1 self.player.kc_passed = 0 if self.player.kc4_both == "a": self.player.kc4_correct = 1 else: self.player.kc4_correct = 0 self.player.kc4_attempts += 1 self.player.kc_passed = 0 if self.player.kc1_correct == 1 and self.player.kc2_correct == 1 and self.player.kc3_correct == 1 and self.player.kc4_correct == 1: self.player.kc_passed = 1 class CompensationRep(Page): def is_displayed(self): if self.player.kc_passed == 0: return True else: return False class Period1(Page): form_model = models.Player form_fields = ['effort_1', 'decision_time_1'] def before_next_page(self): random_num = random.randint(1,100) if self.player.effort_1 == 1: self.player.cost_of_effort_1 = 50 if random_num < 6: self.player.outcome_1 = "High" elif random_num < 36: self.player.outcome_1 = "Medium" else: self.player.outcome_1 = "Low" elif self.player.effort_1 == 2: self.player.cost_of_effort_1 = 150 if random_num < 11: self.player.outcome_1 = "High" elif random_num < 41: self.player.outcome_1 = "Medium" else: self.player.outcome_1 = "Low" elif self.player.effort_1 == 3: self.player.cost_of_effort_1 = 250 if random_num < 16: self.player.outcome_1 = "High" elif random_num < 46: self.player.outcome_1 = "Medium" else: self.player.outcome_1 = "Low" elif self.player.effort_1 == 4: self.player.cost_of_effort_1 = 350 if random_num < 21: self.player.outcome_1 = "High" elif random_num < 51: self.player.outcome_1 = "Medium" else: self.player.outcome_1 = "Low" elif self.player.effort_1 == 5: self.player.cost_of_effort_1 = 450 if random_num < 26: self.player.outcome_1 = "High" elif random_num < 56: self.player.outcome_1 = "Medium" else: self.player.outcome_1 = "Low" elif self.player.effort_1 == 6: self.player.cost_of_effort_1 = 550 if random_num < 31: self.player.outcome_1 = "High" elif random_num < 61: self.player.outcome_1 = "Medium" else: self.player.outcome_1 = "Low" elif self.player.effort_1 == 7: self.player.cost_of_effort_1 = 650 if random_num < 36: self.player.outcome_1 = "High" elif random_num < 66: self.player.outcome_1 = "Medium" else: self.player.outcome_1 = "Low" elif self.player.effort_1 == 8: self.player.cost_of_effort_1 = 750 if random_num < 41: self.player.outcome_1 = "High" elif random_num < 71: self.player.outcome_1 = "Medium" else: self.player.outcome_1 = "Low" elif self.player.effort_1 == 9: self.player.cost_of_effort_1 = 850 if random_num < 46: self.player.outcome_1 = "High" elif random_num < 76: self.player.outcome_1 = "Medium" else: self.player.outcome_1 = "Low" elif self.player.effort_1 == 10: self.player.cost_of_effort_1 = 950 if random_num < 51: self.player.outcome_1 = "High" elif random_num < 81: self.player.outcome_1 = "Medium" else: self.player.outcome_1 = "Low" elif self.player.effort_1 == 11: self.player.cost_of_effort_1 = 1050 if random_num < 56: self.player.outcome_1 = "High" elif random_num < 86: self.player.outcome_1 = "Medium" else: self.player.outcome_1 = "Low" elif self.player.effort_1 == 12: self.player.cost_of_effort_1 = 1150 if random_num < 61: self.player.outcome_1 = "High" elif random_num < 91: self.player.outcome_1 = "Medium" else: self.player.outcome_1 = "Low" elif self.player.effort_1 == 13: self.player.cost_of_effort_1 = 1250 if random_num < 66: self.player.outcome_1 = "High" elif random_num < 96: self.player.outcome_1 = "Medium" else: self.player.outcome_1 = "Low" if self.player.outcome_1 == "High": self.player.net_pay_1 = 3250 - self.player.cost_of_effort_1 if self.player.condition == 1: self.player.bonus_1 = 2000 elif self.player.condition == 3: self.player.bonus_1 = 1000 elif self.player.outcome_1 == "Medium": self.player.net_pay_1 = 2250 - self.player.cost_of_effort_1 if self.player.condition == 1: self.player.bonus_1 = 1000 elif self.player.condition == 2: self.player.penalty_1 = 1000 elif self.player.outcome_1 == "Low": self.player.net_pay_1 = 1250 - self.player.cost_of_effort_1 if self.player.condition == 2: self.player.penalty_1 = 2000 elif self.player.condition == 3: self.player.penalty_1 = 1000 class Period2(Page): form_model = models.Player form_fields = ['effort_2', 'decision_time_2'] def before_next_page(self): random_num = random.randint(1,100) if self.player.effort_2 == 1: self.player.cost_of_effort_2 = 50 if random_num < 6: self.player.outcome_2 = "High" elif random_num < 36: self.player.outcome_2 = "Medium" else: self.player.outcome_2 = "Low" elif self.player.effort_2 == 2: self.player.cost_of_effort_2 = 150 if random_num < 11: self.player.outcome_2 = "High" elif random_num < 41: self.player.outcome_2 = "Medium" else: self.player.outcome_2 = "Low" elif self.player.effort_2 == 3: self.player.cost_of_effort_2 = 250 if random_num < 16: self.player.outcome_2 = "High" elif random_num < 46: self.player.outcome_2 = "Medium" else: self.player.outcome_2 = "Low" elif self.player.effort_2 == 4: self.player.cost_of_effort_2 = 350 if random_num < 21: self.player.outcome_2 = "High" elif random_num < 51: self.player.outcome_2 = "Medium" else: self.player.outcome_2 = "Low" elif self.player.effort_2 == 5: self.player.cost_of_effort_2 = 450 if random_num < 26: self.player.outcome_2 = "High" elif random_num < 56: self.player.outcome_2 = "Medium" else: self.player.outcome_2 = "Low" elif self.player.effort_2 == 6: self.player.cost_of_effort_2 = 550 if random_num < 31: self.player.outcome_2 = "High" elif random_num < 61: self.player.outcome_2 = "Medium" else: self.player.outcome_2 = "Low" elif self.player.effort_2 == 7: self.player.cost_of_effort_2 = 650 if random_num < 36: self.player.outcome_2 = "High" elif random_num < 66: self.player.outcome_2 = "Medium" else: self.player.outcome_2 = "Low" elif self.player.effort_2 == 8: self.player.cost_of_effort_2 = 750 if random_num < 41: self.player.outcome_2 = "High" elif random_num < 71: self.player.outcome_2 = "Medium" else: self.player.outcome_2 = "Low" elif self.player.effort_2 == 9: self.player.cost_of_effort_2 = 850 if random_num < 46: self.player.outcome_2 = "High" elif random_num < 76: self.player.outcome_2 = "Medium" else: self.player.outcome_2 = "Low" elif self.player.effort_2 == 10: self.player.cost_of_effort_2 = 950 if random_num < 51: self.player.outcome_2 = "High" elif random_num < 81: self.player.outcome_2 = "Medium" else: self.player.outcome_2 = "Low" elif self.player.effort_2 == 11: self.player.cost_of_effort_2 = 1050 if random_num < 56: self.player.outcome_2 = "High" elif random_num < 86: self.player.outcome_2 = "Medium" else: self.player.outcome_2 = "Low" elif self.player.effort_2 == 12: self.player.cost_of_effort_2 = 1150 if random_num < 61: self.player.outcome_2 = "High" elif random_num < 91: self.player.outcome_2 = "Medium" else: self.player.outcome_2 = "Low" elif self.player.effort_2 == 13: self.player.cost_of_effort_2 = 1250 if random_num < 66: self.player.outcome_2 = "High" elif random_num < 96: self.player.outcome_2 = "Medium" else: self.player.outcome_2 = "Low" if self.player.outcome_2 == "High": self.player.net_pay_2 = 3250 - self.player.cost_of_effort_2 if self.player.condition == 1: self.player.bonus_2 = 2000 elif self.player.condition == 3: self.player.bonus_2 = 1000 elif self.player.outcome_2 == "Medium": self.player.net_pay_2 = 2250 - self.player.cost_of_effort_2 if self.player.condition == 1: self.player.bonus_2 = 1000 elif self.player.condition == 2: self.player.penalty_2 = 1000 elif self.player.outcome_2 == "Low": self.player.net_pay_2 = 1250 - self.player.cost_of_effort_2 if self.player.condition == 2: self.player.penalty_2 = 2000 elif self.player.condition == 3: self.player.penalty_2 = 1000 class Period3(Page): form_model = models.Player form_fields = ['effort_3', 'decision_time_3'] def before_next_page(self): random_num = random.randint(1,100) if self.player.effort_3 == 1: self.player.cost_of_effort_3 = 50 if random_num < 6: self.player.outcome_3 = "High" elif random_num < 36: self.player.outcome_3 = "Medium" else: self.player.outcome_3 = "Low" elif self.player.effort_3 == 2: self.player.cost_of_effort_3 = 150 if random_num < 11: self.player.outcome_3 = "High" elif random_num < 41: self.player.outcome_3 = "Medium" else: self.player.outcome_3 = "Low" elif self.player.effort_3 == 3: self.player.cost_of_effort_3 = 250 if random_num < 16: self.player.outcome_3 = "High" elif random_num < 46: self.player.outcome_3 = "Medium" else: self.player.outcome_3 = "Low" elif self.player.effort_3 == 4: self.player.cost_of_effort_3 = 350 if random_num < 21: self.player.outcome_3 = "High" elif random_num < 51: self.player.outcome_3 = "Medium" else: self.player.outcome_3 = "Low" elif self.player.effort_3 == 5: self.player.cost_of_effort_3 = 450 if random_num < 26: self.player.outcome_3 = "High" elif random_num < 56: self.player.outcome_3 = "Medium" else: self.player.outcome_3 = "Low" elif self.player.effort_3 == 6: self.player.cost_of_effort_3 = 550 if random_num < 31: self.player.outcome_3 = "High" elif random_num < 61: self.player.outcome_3 = "Medium" else: self.player.outcome_3 = "Low" elif self.player.effort_3 == 7: self.player.cost_of_effort_3 = 650 if random_num < 36: self.player.outcome_3 = "High" elif random_num < 66: self.player.outcome_3 = "Medium" else: self.player.outcome_3 = "Low" elif self.player.effort_3 == 8: self.player.cost_of_effort_3 = 750 if random_num < 41: self.player.outcome_3 = "High" elif random_num < 71: self.player.outcome_3 = "Medium" else: self.player.outcome_3 = "Low" elif self.player.effort_3 == 9: self.player.cost_of_effort_3 = 850 if random_num < 46: self.player.outcome_3 = "High" elif random_num < 76: self.player.outcome_3 = "Medium" else: self.player.outcome_3 = "Low" elif self.player.effort_3 == 10: self.player.cost_of_effort_3 = 950 if random_num < 51: self.player.outcome_3 = "High" elif random_num < 81: self.player.outcome_3 = "Medium" else: self.player.outcome_3 = "Low" elif self.player.effort_3 == 11: self.player.cost_of_effort_3 = 1050 if random_num < 56: self.player.outcome_3 = "High" elif random_num < 86: self.player.outcome_3 = "Medium" else: self.player.outcome_3 = "Low" elif self.player.effort_3 == 12: self.player.cost_of_effort_3 = 1150 if random_num < 61: self.player.outcome_3 = "High" elif random_num < 91: self.player.outcome_3 = "Medium" else: self.player.outcome_3 = "Low" elif self.player.effort_3 == 13: self.player.cost_of_effort_3 = 1250 if random_num < 66: self.player.outcome_3 = "High" elif random_num < 96: self.player.outcome_3 = "Medium" else: self.player.outcome_3 = "Low" if self.player.outcome_3 == "High": self.player.net_pay_3 = 3250 - self.player.cost_of_effort_3 if self.player.condition == 1: self.player.bonus_3 = 2000 elif self.player.condition == 3: self.player.bonus_3 = 1000 elif self.player.outcome_3 == "Medium": self.player.net_pay_3 = 2250 - self.player.cost_of_effort_3 if self.player.condition == 1: self.player.bonus_3 = 1000 elif self.player.condition == 2: self.player.penalty_3 = 1000 elif self.player.outcome_3 == "Low": self.player.net_pay_3 = 1250 - self.player.cost_of_effort_3 if self.player.condition == 2: self.player.penalty_3 = 2000 elif self.player.condition == 3: self.player.penalty_3 = 1000 class Period4(Page): form_model = models.Player form_fields = ['effort_4', 'decision_time_4'] def before_next_page(self): random_num = random.randint(1,100) if self.player.effort_4 == 1: self.player.cost_of_effort_4 = 50 if random_num < 6: self.player.outcome_4 = "High" elif random_num < 36: self.player.outcome_4 = "Medium" else: self.player.outcome_4 = "Low" elif self.player.effort_4 == 2: self.player.cost_of_effort_4 = 150 if random_num < 11: self.player.outcome_4 = "High" elif random_num < 41: self.player.outcome_4 = "Medium" else: self.player.outcome_4 = "Low" elif self.player.effort_4 == 3: self.player.cost_of_effort_4 = 250 if random_num < 16: self.player.outcome_4 = "High" elif random_num < 46: self.player.outcome_4 = "Medium" else: self.player.outcome_4 = "Low" elif self.player.effort_4 == 4: self.player.cost_of_effort_4 = 350 if random_num < 21: self.player.outcome_4 = "High" elif random_num < 51: self.player.outcome_4 = "Medium" else: self.player.outcome_4 = "Low" elif self.player.effort_4 == 5: self.player.cost_of_effort_4 = 450 if random_num < 26: self.player.outcome_4 = "High" elif random_num < 56: self.player.outcome_4 = "Medium" else: self.player.outcome_4 = "Low" elif self.player.effort_4 == 6: self.player.cost_of_effort_4 = 550 if random_num < 31: self.player.outcome_4 = "High" elif random_num < 61: self.player.outcome_4 = "Medium" else: self.player.outcome_4 = "Low" elif self.player.effort_4 == 7: self.player.cost_of_effort_4 = 650 if random_num < 36: self.player.outcome_4 = "High" elif random_num < 66: self.player.outcome_4 = "Medium" else: self.player.outcome_4 = "Low" elif self.player.effort_4 == 8: self.player.cost_of_effort_4 = 750 if random_num < 41: self.player.outcome_4 = "High" elif random_num < 71: self.player.outcome_4 = "Medium" else: self.player.outcome_4 = "Low" elif self.player.effort_4 == 9: self.player.cost_of_effort_4 = 850 if random_num < 46: self.player.outcome_4 = "High" elif random_num < 76: self.player.outcome_4 = "Medium" else: self.player.outcome_4 = "Low" elif self.player.effort_4 == 10: self.player.cost_of_effort_4 = 950 if random_num < 51: self.player.outcome_4 = "High" elif random_num < 81: self.player.outcome_4 = "Medium" else: self.player.outcome_4 = "Low" elif self.player.effort_4 == 11: self.player.cost_of_effort_4 = 1050 if random_num < 56: self.player.outcome_4 = "High" elif random_num < 86: self.player.outcome_4 = "Medium" else: self.player.outcome_4 = "Low" elif self.player.effort_4 == 12: self.player.cost_of_effort_4 = 1150 if random_num < 61: self.player.outcome_4 = "High" elif random_num < 91: self.player.outcome_4 = "Medium" else: self.player.outcome_4 = "Low" elif self.player.effort_4 == 13: self.player.cost_of_effort_4 = 1250 if random_num < 66: self.player.outcome_4 = "High" elif random_num < 96: self.player.outcome_4 = "Medium" else: self.player.outcome_4 = "Low" if self.player.outcome_4 == "High": self.player.net_pay_4 = 3250 - self.player.cost_of_effort_4 if self.player.condition == 1: self.player.bonus_4 = 2000 elif self.player.condition == 3: self.player.bonus_4 = 1000 elif self.player.outcome_4 == "Medium": self.player.net_pay_4 = 2250 - self.player.cost_of_effort_4 if self.player.condition == 1: self.player.bonus_4 = 1000 elif self.player.condition == 2: self.player.penalty_4 = 1000 elif self.player.outcome_4 == "Low": self.player.net_pay_4 = 1250 - self.player.cost_of_effort_4 if self.player.condition == 2: self.player.penalty_4 = 2000 elif self.player.condition == 3: self.player.penalty_4 = 1000 class Period5(Page): form_model = models.Player form_fields = ['effort_5', 'decision_time_5'] def before_next_page(self): random_num = random.randint(1,100) if self.player.effort_5 == 1: self.player.cost_of_effort_5 = 50 if random_num < 6: self.player.outcome_5 = "High" elif random_num < 36: self.player.outcome_5 = "Medium" else: self.player.outcome_5 = "Low" elif self.player.effort_5 == 2: self.player.cost_of_effort_5 = 150 if random_num < 11: self.player.outcome_5 = "High" elif random_num < 41: self.player.outcome_5 = "Medium" else: self.player.outcome_5 = "Low" elif self.player.effort_5 == 3: self.player.cost_of_effort_5 = 250 if random_num < 16: self.player.outcome_5 = "High" elif random_num < 46: self.player.outcome_5 = "Medium" else: self.player.outcome_5 = "Low" elif self.player.effort_5 == 4: self.player.cost_of_effort_5 = 350 if random_num < 21: self.player.outcome_5 = "High" elif random_num < 51: self.player.outcome_5 = "Medium" else: self.player.outcome_5 = "Low" elif self.player.effort_5 == 5: self.player.cost_of_effort_5 = 450 if random_num < 26: self.player.outcome_5 = "High" elif random_num < 56: self.player.outcome_5 = "Medium" else: self.player.outcome_5 = "Low" elif self.player.effort_5 == 6: self.player.cost_of_effort_5 = 550 if random_num < 31: self.player.outcome_5 = "High" elif random_num < 61: self.player.outcome_5 = "Medium" else: self.player.outcome_5 = "Low" elif self.player.effort_5 == 7: self.player.cost_of_effort_5 = 650 if random_num < 36: self.player.outcome_5 = "High" elif random_num < 66: self.player.outcome_5 = "Medium" else: self.player.outcome_5 = "Low" elif self.player.effort_5 == 8: self.player.cost_of_effort_5 = 750 if random_num < 41: self.player.outcome_5 = "High" elif random_num < 71: self.player.outcome_5 = "Medium" else: self.player.outcome_5 = "Low" elif self.player.effort_5 == 9: self.player.cost_of_effort_5 = 850 if random_num < 46: self.player.outcome_5 = "High" elif random_num < 76: self.player.outcome_5 = "Medium" else: self.player.outcome_5 = "Low" elif self.player.effort_5 == 10: self.player.cost_of_effort_5 = 950 if random_num < 51: self.player.outcome_5 = "High" elif random_num < 81: self.player.outcome_5 = "Medium" else: self.player.outcome_5 = "Low" elif self.player.effort_5 == 11: self.player.cost_of_effort_5 = 1050 if random_num < 56: self.player.outcome_5 = "High" elif random_num < 86: self.player.outcome_5 = "Medium" else: self.player.outcome_5 = "Low" elif self.player.effort_5 == 12: self.player.cost_of_effort_5 = 1150 if random_num < 61: self.player.outcome_5 = "High" elif random_num < 91: self.player.outcome_5 = "Medium" else: self.player.outcome_5 = "Low" elif self.player.effort_5 == 13: self.player.cost_of_effort_5 = 1250 if random_num < 66: self.player.outcome_5 = "High" elif random_num < 96: self.player.outcome_5 = "Medium" else: self.player.outcome_5 = "Low" if self.player.outcome_5 == "High": self.player.net_pay_5 = 3250 - self.player.cost_of_effort_5 if self.player.condition == 1: self.player.bonus_5 = 2000 elif self.player.condition == 3: self.player.bonus_5 = 1000 elif self.player.outcome_5 == "Medium": self.player.net_pay_5 = 2250 - self.player.cost_of_effort_5 if self.player.condition == 1: self.player.bonus_5 = 1000 elif self.player.condition == 2: self.player.penalty_5 = 1000 elif self.player.outcome_5 == "Low": self.player.net_pay_5 = 1250 - self.player.cost_of_effort_5 if self.player.condition == 2: self.player.penalty_5 = 2000 elif self.player.condition == 3: self.player.penalty_5 = 1000 class Period6(Page): form_model = models.Player form_fields = ['effort_6', 'decision_time_6'] def before_next_page(self): random_num = random.randint(1,100) if self.player.effort_6 == 1: self.player.cost_of_effort_6 = 50 if random_num < 6: self.player.outcome_6 = "High" elif random_num < 36: self.player.outcome_6 = "Medium" else: self.player.outcome_6 = "Low" elif self.player.effort_6 == 2: self.player.cost_of_effort_6 = 150 if random_num < 11: self.player.outcome_6 = "High" elif random_num < 41: self.player.outcome_6 = "Medium" else: self.player.outcome_6 = "Low" elif self.player.effort_6 == 3: self.player.cost_of_effort_6 = 250 if random_num < 16: self.player.outcome_6 = "High" elif random_num < 46: self.player.outcome_6 = "Medium" else: self.player.outcome_6 = "Low" elif self.player.effort_6 == 4: self.player.cost_of_effort_6 = 350 if random_num < 21: self.player.outcome_6 = "High" elif random_num < 51: self.player.outcome_6 = "Medium" else: self.player.outcome_6 = "Low" elif self.player.effort_6 == 5: self.player.cost_of_effort_6 = 450 if random_num < 26: self.player.outcome_6 = "High" elif random_num < 56: self.player.outcome_6 = "Medium" else: self.player.outcome_6 = "Low" elif self.player.effort_6 == 6: self.player.cost_of_effort_6 = 550 if random_num < 31: self.player.outcome_6 = "High" elif random_num < 61: self.player.outcome_6 = "Medium" else: self.player.outcome_6 = "Low" elif self.player.effort_6 == 7: self.player.cost_of_effort_6 = 650 if random_num < 36: self.player.outcome_6 = "High" elif random_num < 66: self.player.outcome_6 = "Medium" else: self.player.outcome_6 = "Low" elif self.player.effort_6 == 8: self.player.cost_of_effort_6 = 750 if random_num < 41: self.player.outcome_6 = "High" elif random_num < 71: self.player.outcome_6 = "Medium" else: self.player.outcome_6 = "Low" elif self.player.effort_6 == 9: self.player.cost_of_effort_6 = 850 if random_num < 46: self.player.outcome_6 = "High" elif random_num < 76: self.player.outcome_6 = "Medium" else: self.player.outcome_6 = "Low" elif self.player.effort_6 == 10: self.player.cost_of_effort_6 = 950 if random_num < 51: self.player.outcome_6 = "High" elif random_num < 81: self.player.outcome_6 = "Medium" else: self.player.outcome_6 = "Low" elif self.player.effort_6 == 11: self.player.cost_of_effort_6 = 1050 if random_num < 56: self.player.outcome_6 = "High" elif random_num < 86: self.player.outcome_6 = "Medium" else: self.player.outcome_6 = "Low" elif self.player.effort_6 == 12: self.player.cost_of_effort_6 = 1150 if random_num < 61: self.player.outcome_6 = "High" elif random_num < 91: self.player.outcome_6 = "Medium" else: self.player.outcome_6 = "Low" elif self.player.effort_6 == 13: self.player.cost_of_effort_6 = 1250 if random_num < 66: self.player.outcome_6 = "High" elif random_num < 96: self.player.outcome_6 = "Medium" else: self.player.outcome_6 = "Low" if self.player.outcome_6 == "High": self.player.net_pay_6 = 3250 - self.player.cost_of_effort_6 if self.player.condition == 1: self.player.bonus_6 = 2000 elif self.player.condition == 3: self.player.bonus_6 = 1000 elif self.player.outcome_6 == "Medium": self.player.net_pay_6 = 2250 - self.player.cost_of_effort_6 if self.player.condition == 1: self.player.bonus_6 = 1000 elif self.player.condition == 2: self.player.penalty_6 = 1000 elif self.player.outcome_6 == "Low": self.player.net_pay_6 = 1250 - self.player.cost_of_effort_6 if self.player.condition == 2: self.player.penalty_6 = 2000 elif self.player.condition == 3: self.player.penalty_6 = 1000 class Period7(Page): form_model = models.Player form_fields = ['effort_7', 'decision_time_7'] def before_next_page(self): random_num = random.randint(1,100) if self.player.effort_7 == 1: self.player.cost_of_effort_7 = 50 if random_num < 6: self.player.outcome_7 = "High" elif random_num < 36: self.player.outcome_7 = "Medium" else: self.player.outcome_7 = "Low" elif self.player.effort_7 == 2: self.player.cost_of_effort_7 = 150 if random_num < 11: self.player.outcome_7 = "High" elif random_num < 41: self.player.outcome_7 = "Medium" else: self.player.outcome_7 = "Low" elif self.player.effort_7 == 3: self.player.cost_of_effort_7 = 250 if random_num < 16: self.player.outcome_7 = "High" elif random_num < 46: self.player.outcome_7 = "Medium" else: self.player.outcome_7 = "Low" elif self.player.effort_7 == 4: self.player.cost_of_effort_7 = 350 if random_num < 21: self.player.outcome_7 = "High" elif random_num < 51: self.player.outcome_7 = "Medium" else: self.player.outcome_7 = "Low" elif self.player.effort_7 == 5: self.player.cost_of_effort_7 = 450 if random_num < 26: self.player.outcome_7 = "High" elif random_num < 56: self.player.outcome_7 = "Medium" else: self.player.outcome_7 = "Low" elif self.player.effort_7 == 6: self.player.cost_of_effort_7 = 550 if random_num < 31: self.player.outcome_7 = "High" elif random_num < 61: self.player.outcome_7 = "Medium" else: self.player.outcome_7 = "Low" elif self.player.effort_7 == 7: self.player.cost_of_effort_7 = 650 if random_num < 36: self.player.outcome_7 = "High" elif random_num < 66: self.player.outcome_7 = "Medium" else: self.player.outcome_7 = "Low" elif self.player.effort_7 == 8: self.player.cost_of_effort_7 = 750 if random_num < 41: self.player.outcome_7 = "High" elif random_num < 71: self.player.outcome_7 = "Medium" else: self.player.outcome_7 = "Low" elif self.player.effort_7 == 9: self.player.cost_of_effort_7 = 850 if random_num < 46: self.player.outcome_7 = "High" elif random_num < 76: self.player.outcome_7 = "Medium" else: self.player.outcome_7 = "Low" elif self.player.effort_7 == 10: self.player.cost_of_effort_7 = 950 if random_num < 51: self.player.outcome_7 = "High" elif random_num < 81: self.player.outcome_7 = "Medium" else: self.player.outcome_7 = "Low" elif self.player.effort_7 == 11: self.player.cost_of_effort_7 = 1050 if random_num < 56: self.player.outcome_7 = "High" elif random_num < 86: self.player.outcome_7 = "Medium" else: self.player.outcome_7 = "Low" elif self.player.effort_7 == 12: self.player.cost_of_effort_7 = 1150 if random_num < 61: self.player.outcome_7 = "High" elif random_num < 91: self.player.outcome_7 = "Medium" else: self.player.outcome_7 = "Low" elif self.player.effort_7 == 13: self.player.cost_of_effort_7 = 1250 if random_num < 66: self.player.outcome_7 = "High" elif random_num < 96: self.player.outcome_7 = "Medium" else: self.player.outcome_7 = "Low" if self.player.outcome_7 == "High": self.player.net_pay_7 = 3250 - self.player.cost_of_effort_7 if self.player.condition == 1: self.player.bonus_7 = 2000 elif self.player.condition == 3: self.player.bonus_7 = 1000 elif self.player.outcome_7 == "Medium": self.player.net_pay_7 = 2250 - self.player.cost_of_effort_7 if self.player.condition == 1: self.player.bonus_7 = 1000 elif self.player.condition == 2: self.player.penalty_7 = 1000 elif self.player.outcome_7 == "Low": self.player.net_pay_7 = 1250 - self.player.cost_of_effort_7 if self.player.condition == 2: self.player.penalty_7 = 2000 elif self.player.condition == 3: self.player.penalty_7 = 1000 class Period8(Page): form_model = models.Player form_fields = ['effort_8', 'decision_time_8'] def before_next_page(self): random_num = random.randint(1,100) if self.player.effort_8 == 1: self.player.cost_of_effort_8 = 50 if random_num < 6: self.player.outcome_8 = "High" elif random_num < 36: self.player.outcome_8 = "Medium" else: self.player.outcome_8 = "Low" elif self.player.effort_8 == 2: self.player.cost_of_effort_8 = 150 if random_num < 11: self.player.outcome_8 = "High" elif random_num < 41: self.player.outcome_8 = "Medium" else: self.player.outcome_8 = "Low" elif self.player.effort_8 == 3: self.player.cost_of_effort_8 = 250 if random_num < 16: self.player.outcome_8 = "High" elif random_num < 46: self.player.outcome_8 = "Medium" else: self.player.outcome_8 = "Low" elif self.player.effort_8 == 4: self.player.cost_of_effort_8 = 350 if random_num < 21: self.player.outcome_8 = "High" elif random_num < 51: self.player.outcome_8 = "Medium" else: self.player.outcome_8 = "Low" elif self.player.effort_8 == 5: self.player.cost_of_effort_8 = 450 if random_num < 26: self.player.outcome_8 = "High" elif random_num < 56: self.player.outcome_8 = "Medium" else: self.player.outcome_8 = "Low" elif self.player.effort_8 == 6: self.player.cost_of_effort_8 = 550 if random_num < 31: self.player.outcome_8 = "High" elif random_num < 61: self.player.outcome_8 = "Medium" else: self.player.outcome_8 = "Low" elif self.player.effort_8 == 7: self.player.cost_of_effort_8 = 650 if random_num < 36: self.player.outcome_8 = "High" elif random_num < 66: self.player.outcome_8 = "Medium" else: self.player.outcome_8 = "Low" elif self.player.effort_8 == 8: self.player.cost_of_effort_8 = 750 if random_num < 41: self.player.outcome_8 = "High" elif random_num < 71: self.player.outcome_8 = "Medium" else: self.player.outcome_8 = "Low" elif self.player.effort_8 == 9: self.player.cost_of_effort_8 = 850 if random_num < 46: self.player.outcome_8 = "High" elif random_num < 76: self.player.outcome_8 = "Medium" else: self.player.outcome_8 = "Low" elif self.player.effort_8 == 10: self.player.cost_of_effort_8 = 950 if random_num < 51: self.player.outcome_8 = "High" elif random_num < 81: self.player.outcome_8 = "Medium" else: self.player.outcome_8 = "Low" elif self.player.effort_8 == 11: self.player.cost_of_effort_8 = 1050 if random_num < 56: self.player.outcome_8 = "High" elif random_num < 86: self.player.outcome_8 = "Medium" else: self.player.outcome_8 = "Low" elif self.player.effort_8 == 12: self.player.cost_of_effort_8 = 1150 if random_num < 61: self.player.outcome_8 = "High" elif random_num < 91: self.player.outcome_8 = "Medium" else: self.player.outcome_8 = "Low" elif self.player.effort_8 == 13: self.player.cost_of_effort_8 = 1250 if random_num < 66: self.player.outcome_8 = "High" elif random_num < 96: self.player.outcome_8 = "Medium" else: self.player.outcome_8 = "Low" if self.player.outcome_8 == "High": self.player.net_pay_8 = 3250 - self.player.cost_of_effort_8 if self.player.condition == 1: self.player.bonus_8 = 2000 elif self.player.condition == 3: self.player.bonus_8 = 1000 elif self.player.outcome_8 == "Medium": self.player.net_pay_8 = 2250 - self.player.cost_of_effort_8 if self.player.condition == 1: self.player.bonus_8 = 1000 elif self.player.condition == 2: self.player.penalty_8 = 1000 elif self.player.outcome_8 == "Low": self.player.net_pay_8 = 1250 - self.player.cost_of_effort_8 if self.player.condition == 2: self.player.penalty_8 = 2000 elif self.player.condition == 3: self.player.penalty_8 = 1000 class Period9(Page): form_model = models.Player form_fields = ['effort_9', 'decision_time_9'] def before_next_page(self): random_num = random.randint(1,100) if self.player.effort_9 == 1: self.player.cost_of_effort_9 = 50 if random_num < 6: self.player.outcome_9 = "High" elif random_num < 36: self.player.outcome_9 = "Medium" else: self.player.outcome_9 = "Low" elif self.player.effort_9 == 2: self.player.cost_of_effort_9 = 150 if random_num < 11: self.player.outcome_9 = "High" elif random_num < 41: self.player.outcome_9 = "Medium" else: self.player.outcome_9 = "Low" elif self.player.effort_9 == 3: self.player.cost_of_effort_9 = 250 if random_num < 16: self.player.outcome_9 = "High" elif random_num < 46: self.player.outcome_9 = "Medium" else: self.player.outcome_9 = "Low" elif self.player.effort_9 == 4: self.player.cost_of_effort_9 = 350 if random_num < 21: self.player.outcome_9 = "High" elif random_num < 51: self.player.outcome_9 = "Medium" else: self.player.outcome_9 = "Low" elif self.player.effort_9 == 5: self.player.cost_of_effort_9 = 450 if random_num < 26: self.player.outcome_9 = "High" elif random_num < 56: self.player.outcome_9 = "Medium" else: self.player.outcome_9 = "Low" elif self.player.effort_9 == 6: self.player.cost_of_effort_9 = 550 if random_num < 31: self.player.outcome_9 = "High" elif random_num < 61: self.player.outcome_9 = "Medium" else: self.player.outcome_9 = "Low" elif self.player.effort_9 == 7: self.player.cost_of_effort_9 = 650 if random_num < 36: self.player.outcome_9 = "High" elif random_num < 66: self.player.outcome_9 = "Medium" else: self.player.outcome_9 = "Low" elif self.player.effort_9 == 8: self.player.cost_of_effort_9 = 750 if random_num < 41: self.player.outcome_9 = "High" elif random_num < 71: self.player.outcome_9 = "Medium" else: self.player.outcome_9 = "Low" elif self.player.effort_9 == 9: self.player.cost_of_effort_9 = 850 if random_num < 46: self.player.outcome_9 = "High" elif random_num < 76: self.player.outcome_9 = "Medium" else: self.player.outcome_9 = "Low" elif self.player.effort_9 == 10: self.player.cost_of_effort_9 = 950 if random_num < 51: self.player.outcome_9 = "High" elif random_num < 81: self.player.outcome_9 = "Medium" else: self.player.outcome_9 = "Low" elif self.player.effort_9 == 11: self.player.cost_of_effort_9 = 1050 if random_num < 56: self.player.outcome_9 = "High" elif random_num < 86: self.player.outcome_9 = "Medium" else: self.player.outcome_9 = "Low" elif self.player.effort_9 == 12: self.player.cost_of_effort_9 = 1150 if random_num < 61: self.player.outcome_9 = "High" elif random_num < 91: self.player.outcome_9 = "Medium" else: self.player.outcome_9 = "Low" elif self.player.effort_9 == 13: self.player.cost_of_effort_9 = 1250 if random_num < 66: self.player.outcome_9 = "High" elif random_num < 96: self.player.outcome_9 = "Medium" else: self.player.outcome_9 = "Low" if self.player.outcome_9 == "High": self.player.net_pay_9 = 3250 - self.player.cost_of_effort_9 if self.player.condition == 1: self.player.bonus_9 = 2000 elif self.player.condition == 3: self.player.bonus_9 = 1000 elif self.player.outcome_9 == "Medium": self.player.net_pay_9 = 2250 - self.player.cost_of_effort_9 if self.player.condition == 1: self.player.bonus_9 = 1000 elif self.player.condition == 2: self.player.penalty_9 = 1000 elif self.player.outcome_9 == "Low": self.player.net_pay_9 = 1250 - self.player.cost_of_effort_9 if self.player.condition == 2: self.player.penalty_9 = 2000 elif self.player.condition == 3: self.player.penalty_9 = 1000 class Period10(Page): form_model = models.Player form_fields = ['effort_10', 'decision_time_10'] def before_next_page(self): random_num = random.randint(1,100) if self.player.effort_10 == 1: self.player.cost_of_effort_10 = 50 if random_num < 6: self.player.outcome_10 = "High" elif random_num < 36: self.player.outcome_10 = "Medium" else: self.player.outcome_10 = "Low" elif self.player.effort_10 == 2: self.player.cost_of_effort_10 = 150 if random_num < 11: self.player.outcome_10 = "High" elif random_num < 41: self.player.outcome_10 = "Medium" else: self.player.outcome_10 = "Low" elif self.player.effort_10 == 3: self.player.cost_of_effort_10 = 250 if random_num < 16: self.player.outcome_10 = "High" elif random_num < 46: self.player.outcome_10 = "Medium" else: self.player.outcome_10 = "Low" elif self.player.effort_10 == 4: self.player.cost_of_effort_10 = 350 if random_num < 21: self.player.outcome_10 = "High" elif random_num < 51: self.player.outcome_10 = "Medium" else: self.player.outcome_10 = "Low" elif self.player.effort_10 == 5: self.player.cost_of_effort_10 = 450 if random_num < 26: self.player.outcome_10 = "High" elif random_num < 56: self.player.outcome_10 = "Medium" else: self.player.outcome_10 = "Low" elif self.player.effort_10 == 6: self.player.cost_of_effort_10 = 550 if random_num < 31: self.player.outcome_10 = "High" elif random_num < 61: self.player.outcome_10 = "Medium" else: self.player.outcome_10 = "Low" elif self.player.effort_10 == 7: self.player.cost_of_effort_10 = 650 if random_num < 36: self.player.outcome_10 = "High" elif random_num < 66: self.player.outcome_10 = "Medium" else: self.player.outcome_10 = "Low" elif self.player.effort_10 == 8: self.player.cost_of_effort_10 = 750 if random_num < 41: self.player.outcome_10 = "High" elif random_num < 71: self.player.outcome_10 = "Medium" else: self.player.outcome_10 = "Low" elif self.player.effort_10 == 9: self.player.cost_of_effort_10 = 850 if random_num < 46: self.player.outcome_10 = "High" elif random_num < 76: self.player.outcome_10 = "Medium" else: self.player.outcome_10 = "Low" elif self.player.effort_10 == 10: self.player.cost_of_effort_10 = 950 if random_num < 51: self.player.outcome_10 = "High" elif random_num < 81: self.player.outcome_10 = "Medium" else: self.player.outcome_10 = "Low" elif self.player.effort_10 == 11: self.player.cost_of_effort_10 = 1050 if random_num < 56: self.player.outcome_10 = "High" elif random_num < 86: self.player.outcome_10 = "Medium" else: self.player.outcome_10 = "Low" elif self.player.effort_10 == 12: self.player.cost_of_effort_10 = 1150 if random_num < 61: self.player.outcome_10 = "High" elif random_num < 91: self.player.outcome_10 = "Medium" else: self.player.outcome_10 = "Low" elif self.player.effort_10 == 13: self.player.cost_of_effort_10 = 1250 if random_num < 66: self.player.outcome_10 = "High" elif random_num < 96: self.player.outcome_10 = "Medium" else: self.player.outcome_10 = "Low" if self.player.outcome_10 == "High": self.player.net_pay_10 = 3250 - self.player.cost_of_effort_10 if self.player.condition == 1: self.player.bonus_10 = 2000 elif self.player.condition == 3: self.player.bonus_10 = 1000 elif self.player.outcome_10 == "Medium": self.player.net_pay_10 = 2250 - self.player.cost_of_effort_10 if self.player.condition == 1: self.player.bonus_10 = 1000 elif self.player.condition == 2: self.player.penalty_10 = 1000 elif self.player.outcome_10 == "Low": self.player.net_pay_10 = 1250 - self.player.cost_of_effort_10 if self.player.condition == 2: self.player.penalty_10 = 2000 elif self.player.condition == 3: self.player.penalty_10 = 1000 self.player.total_lira = self.player.net_pay_1 + self.player.net_pay_2 + self.player.net_pay_3 + self.player.net_pay_4 + self.player.net_pay_5 + self.player.net_pay_6 + \ self.player.net_pay_7 + self.player.net_pay_8 + self.player.net_pay_9 + self.player.net_pay_10 self.player.total_comp = math.ceil((self.player.total_lira / 4000)*100)/100 class Result1(Page): pass class Result2(Page): pass class Result3(Page): pass class Result4(Page): pass class Result5(Page): pass class Result6(Page): pass class Result7(Page): pass class Result8(Page): pass class Result9(Page): pass class Result10(Page): pass class PEQ1(Page): form_model = models.Player form_fields = ['contract_fairness', 'outcome_disappointment', 'salary_ownership', 'outcome_happiness', 'narcissism_1', 'narcissism_2', 'narcissism_3', 'narcissism_4', 'narcissism_5', 'narcissism_6', 'narcissism_7', 'narcissism_8', 'narcissism_9', 'peq1_time'] class PEQ2(Page): form_model = models.Player form_fields = ['risk_1', 'risk_2', 'risk_3', 'risk_4', 'risk_5', 'risk_6', 'risk_7', 'peq2_time'] class PEQ3(Page): form_model = models.Player form_fields = ['bis_1', 'bis_2', 'bis_3', 'bis_4', 'bis_5', 'bis_6', 'bis_7', 'bis_8', 'bis_9', 'bis_10', 'bis_11', 'bis_12', 'bis_13', 'bis_14', 'bis_15', 'bis_16', 'bis_17', 'bis_18', 'bis_19', 'bis_20', 'bis_21', 'bis_22', 'bis_23', 'bis_24', 'peq3_time'] class PEQ4(Page): form_model = models.Player form_fields = ['entitlement_1', 'entitlement_2', 'entitlement_3', 'entitlement_4', 'entitlement_5', 'entitlement_6', 'entitlement_7', 'entitlement_8', 'entitlement_9', 'age', 'gender', 'education', 'work_experience', 'country_origin', 'peq4_time'] class ExitResults(Page): pass page_sequence = [ IC, IC_Decline, DuplicateWorker, GenInstructions, Compensation, KnowledgeCheck, KnowledgeCheckResults, CompensationRep, KnowledgeCheckSub, KnowledgeCheckResults, CompensationRep, KnowledgeCheckSub, KnowledgeCheckResults, CompensationRep, KnowledgeCheckSub, KnowledgeCheckResults, CompensationRep, KnowledgeCheckSub, KnowledgeCheckResults, CompensationRep, KnowledgeCheckSub, KnowledgeCheckResults, CompensationRep, KnowledgeCheckSub, KnowledgeCheckResults, CompensationRep, KnowledgeCheckSub, KnowledgeCheckResults, CompensationRep, KnowledgeCheckSub, KnowledgeCheckResults, CompensationRep, KnowledgeCheckSub, KnowledgeCheckResults, CompensationRep, KnowledgeCheckSub, KnowledgeCheckResults, Period1, Result1, Period2, Result2, Period3, Result3, Period4, Result4, Period5, Result5, Period6, Result6, Period7, Result7, Period8, Result8, Period9, Result9, Period10, Result10, PEQ1, PEQ2, PEQ3, PEQ4, ExitResults ]