from otree.api import * import random import string doc = """ Your app description """ class Constants(BaseConstants): name_in_url = 'home' players_per_group = None num_rounds = 1 class Subsession(BaseSubsession): pass class Group(BaseGroup): pass class Player(BasePlayer): nombre = models.StringField() edad = models.IntegerField() codigo = models.StringField() cedula = models.IntegerField() consentimiento = models.BooleanField( choices=[ [True, 'Acepto (declaro que comprendo la información anterior y mis derechos y compromisos durante este experimento. También entiendo que puedo dejar el experimento en cualquier momento renunciando a recibir el dinero ganado en el experimento)'], [False,'No Acepto'], ], label="ACEPTACIÓN") PCI1 = models.IntegerField( choices=[ [1, '1 parte (la sección 4)'], [2, '2 partes (una parte entre las secciones 1,2 y 3; y la otra parte de la sección 4)'], [3, '2 partes (una parte entre las secciones 1,3 y 4; y la otra parte de la sección 2)'], [4, '4 partes (Se pagan todas las secciones) '], ], widget=widgets.RadioSelect, label="¿Cuántas partes del juego se seleccionarán para su pago?" ) incorrect_attempts1 = models.IntegerField() PCI2 = models.IntegerField( choices=[ [1, 'Seleccionará toda la columna como B'], [2, 'Seleccionará toda la columna como A'], [3, 'Seleccionará a partir de la fila 6 las opciones en la columna A '], [4, 'Seleccionará a partir de la fila 6 las opciones en la columna B '], ], widget=widgets.RadioSelect, label="Supongamos que en uno de los ejercicios usted selecciona la columna B a partir de la fila 6, el computador automaticamente:" ) incorrect_attempts2 = models.IntegerField() PCI3 = models.IntegerField( choices=[ [1, 'COP 20000'], [2, 'COP 40000'], [3, 'COP 20500'], [4, 'COP 38000'], ], widget=widgets.RadioSelect, label="Supongamos que su pago total fue de 20 UMES, su pago en pesos colombianos será:" ) incorrect_attempts3 = models.IntegerField() # PAGES class bienvenida(Page): pass class protocolo(Page): pass class bienvenida(Page): pass class consentimiento(Page): form_model = 'player' form_fields = ['consentimiento','nombre'] class instruccionesgen(Page): @staticmethod def vars_for_template(player: Player): return {'vals_table' : [{'name': 'name' + str(i), 'vals': [10000, 10000*i]} for i in range(11)]} class PCI1(Page): form_model = 'player' form_fields = ['PCI1','incorrect_attempts1'] @staticmethod def vars_for_template(player): return{ 'correct_ans': 2-1, "error_msg": 'Recuerde, al final de la actividad el computador elegirá dos partes para su pago una parte entre las secciones 1,2 y 3; y la otra parte en la sección 4 .', } class PCI1C(Page): pass class PCI2(Page): form_model = 'player' form_fields = ['PCI2','incorrect_attempts2' ] def vars_for_template(self): return{ "correct_ans": 4 -1,#Debes dejar quieto el -1 para la verificacion con js "error_msg": 'Recuerda,el programa seleccionará automáticamente B en todas las filas por debajo y A en todas las filas superiores a esa. ', } class PCI2C(Page): pass class PCI3(Page): form_model = 'player' form_fields = ['PCI3','incorrect_attempts3' ] def vars_for_template(self): return{ "correct_ans": 2 -1,#Debes dejar quieto el -1 para la verificacion con js "error_msg": 'Recuerde, la tasa de conversión de cada UME es de COP 2000, usted recibirá C0P 40000', } @staticmethod def before_next_page(player: Player, timeout_happened): player.participant.vars['order'] = random.randint(0,1) cod = str(random.choice(string.ascii_lowercase)).upper()+str(random.randint(1001, 9999)) player.participant.vars['codigo'] = cod class PCI3C(Page): pass class PC(Page): pass page_sequence = [bienvenida, consentimiento,protocolo, instruccionesgen,PC, PCI1,PCI1C,PCI2,PCI2C,PCI3,PCI3C]