from otree.api import Currency as c, currency_range from ._builtin import Page, WaitPage from .models import Constants from random import * import random import time class P18InstructionsT6(Page): form_model = 'player' form_fields = ['qc_a', 'qc_b', 'qc_c'] def is_displayed(self): return self.player.participant.vars['nextq0'] != 1 and self.player.participant.vars['b5'] == 1 def error_message(self, values): print('values is', values) if values['qc_a'] != 400: return 'Please correct your answer A!!' elif values['qc_b'] != 2200 : return 'Please correct your answer B!!' elif values['qc_c'] != 400 : return 'Please correct your answer C!!' def before_next_page(self): self.player.eliminated = self.player.participant.vars['eliminated'] self.player.gaineliminated = self.player.participant.vars['gaineliminated'] class P19Invest(Page): form_model = 'player' form_fields = ['invest_risk', 'invest_riskfree'] def is_displayed(self): return self.player.participant.vars['nextq0'] != 1 and self.player.participant.vars['b5'] == 1 def error_message(self, values): print('values is', values) if values['invest_risk'] + values['invest_riskfree'] != 1000: return 'the sum must be equal to 1000 !!!' if values['invest_risk'] % 100 != 0: return 'please choose a multiple of 100 !!!' if values['invest_riskfree'] % 100 != 0: return 'please choose a multiple of 100 !!!' def before_next_page(self): self.player.tirage1 = round(random.random(), 2) if self.player.tirage1 <= 0.4: self.player.gain_task5 = self.player.invest_riskfree + (self.player.invest_risk * Constants.multiple) else: self.player.gain_task5 = self.player.invest_riskfree class P16CRT(Page): timeout_seconds = 240 form_model = 'player' form_fields = ['crt_a', 'crt_b', 'crt_c', 'crt_d', 'crt_e', 'crt_f'] def is_displayed(self): return self.player.participant.vars['nextq0'] != 1 and self.player.participant.vars['b5'] == 1 def before_next_page(self): if self.player.crt_a == Constants.crt_correct_a: self.player.gain_crt = self.player.gain_crt + Constants.gaincrtcorrect if self.player.crt_b == Constants.crt_correct_b: self.player.gain_crt = self.player.gain_crt + Constants.gaincrtcorrect if self.player.crt_c == Constants.crt_correct_c: self.player.gain_crt = self.player.gain_crt + Constants.gaincrtcorrect if self.player.crt_d == Constants.crt_correct_d: self.player.gain_crt = self.player.gain_crt + Constants.gaincrtcorrect if self.player.crt_e == Constants.crt_correct_e: self.player.gain_crt = self.player.gain_crt + Constants.gaincrtcorrect if self.player.crt_f == Constants.crt_correct_f: self.player.gain_crt = self.player.gain_crt + Constants.gaincrtcorrect self.participant.vars['gain_crt'] = self.player.gain_crt self.player.treatment = self.player.participant.vars['treatment'] ############################################################## calcul gain final if self.player.participant.vars['treatment'] == 1: self.player.gain_task1_f = self.player.participant.vars['gain_task1_f'] self.player.gain_task2_f = self.player.participant.vars['gain_task2_f'] if self.player.participant.vars['treatment'] == 2: self.player.gain_task1_f = self.player.participant.vars['gain_task3_f'] self.player.gain_task2_f = self.player.participant.vars['gain_task4_f'] self.player.gain_task3_f = self.participant.vars['gain_HL1'] self.player.gain_task4_f = self.player.participant.vars['gain_task5_f'] self.player.gain_task5_f = self.player.gain_task5 self.player.gain_task6_f = self.player.gain_crt self.player.tirageausort = round(randint(1,6),0) if self.player.participant.vars['treatment'] == 1: if self.player.tirageausort == 1: self.player.gain_final = self.player.gain_task1_f elif self.player.tirageausort == 2: self.player.gain_final = self.player.gain_task2_f elif self.player.tirageausort == 3: self.player.gain_final = self.player.gain_task3_f elif self.player.tirageausort == 4: self.player.gain_final = self.player.gain_task4_f elif self.player.tirageausort == 5: self.player.gain_final = self.player.gain_task5_f elif self.player.tirageausort == 6: self.player.gain_final = self.player.gain_task6_f if self.player.participant.vars['treatment'] == 2: if self.player.tirageausort == 1: self.player.gain_final = self.player.gain_task1_f elif self.player.tirageausort == 2: self.player.gain_final = self.player.gain_task2_f elif self.player.tirageausort == 3: self.player.gain_final = self.player.gain_task3_f elif self.player.tirageausort == 4: self.player.gain_final = self.player.gain_task4_f elif self.player.tirageausort == 5: self.player.gain_final = self.player.gain_task5_f elif self.player.tirageausort == 6: self.player.gain_final = self.player.gain_task6_f self.player.gain_final_et_bonus = self.player.gain_final + Constants.bonus1_2 if self.player.gain_final_et_bonus >= 0: self.player.gain_final_eur = round(self.player.gain_final_et_bonus * Constants.taux,1) else: self.player.gain_final_eur = 0 self.player.gain_final_eur_plus_showup = round(self.player.gain_final_eur + Constants.showupfee,1) #self.player.participant.vars['gain_expe1'] = self.player.gain_final_eur_bonus #self.player.gain_expe1 = self.player.gain_final_eur_bonus self.player.payoff = self.player.gain_final_eur_plus_showup * 1000 # class P17CRT_result(Page): # pass class P20Result(Page): timeout_seconds = 120 form_model = 'player' form_fields = [] def is_displayed(self): return self.player.participant.vars['nextq0'] != 1 and self.player.participant.vars['b5'] == 1 class P20Pass(Page): # si le sujet ne réussit pas le screaner timeout_seconds = 0 form_model = 'player' form_fields = [] def is_displayed(self): return self.player.participant.vars['eliminated'] !=0 def before_next_page(self): self.player.eliminated = self.player.participant.vars['eliminated'] self.player.gaineliminated = self.player.participant.vars['gaineliminated'] self.player.gain_final_eur = self.player.participant.vars['gaineliminated'] * Constants.taux #self.player.gain_expe1 = self.player.gain_final_eur_bonus self.player.payoff = self.player.gain_final_eur * 1000 class P20ResultXX(Page): timeout_seconds = 120 form_model = 'player' form_fields = [] def is_displayed(self): return self.player.eliminated != 0 page_sequence = [ P18InstructionsT6, P19Invest, P16CRT, P20Result, P20Pass, P20ResultXX, ]