from otree.api import * import random doc = """ Your app description """ class Constants(BaseConstants): name_in_url = 'resultados' players_per_group = None num_rounds = 1 #TODO: ESTE ORDEN ES CONDICIONAL AL TRATAMIENTO arreglar tabla tasks = [ {'section':1, 'task': 1, 'payoff': 'payoff_1', 'fila': 'fila_s1_1'}, {'section':1, 'task': 2, 'payoff': 'payoff_2', 'fila': 'fila_s1_2'}, {'section':2, 'task': 1, 'payoff': 'payoff_3', 'fila': 'fila_s2_1'}, {'section':2, 'task': 2, 'payoff': 'payoff_4', 'fila': 'fila_s2_2'}, {'section':3, 'task': 1, 'payoff': 'payoff_dg', 'fila': 'fila_s3_1'}, {'section':3, 'task': 2, 'payoff': 'payoff_5', 'fila': 'fila_s3_2'}, {'section':3, 'task': 3, 'payoff': 'payoff_5', 'fila': 'fila_s3_3'}, {'section':3, 'task': 4, 'payoff': 'payoff_6', 'fila': 'fila_s3_4'}, {'section':3, 'task': 5, 'payoff': 'payoff_6', 'fila': 'fila_s3_5'}, {'section':4, 'task': 1, 'payoff': 'payoff_7', 'fila': 'fila_s4'}, {'section':4, 'task': 2, 'payoff': 'payoff_8', 'fila': 'fila_s4'}, {'section':4, 'task': 3, 'payoff': 'payoff_9', 'fila': 'fila_s4'}] class Subsession(BaseSubsession): actividad_pago1 = models.IntegerField() actividad_pago2 = models.IntegerField() act2_color = models.BooleanField() @staticmethod def creating_session(subsession: Subsession): subsession.actividad_pago1 = random.randint(1, 9) subsession.actividad_pago2 = random.randint(10, 12) class Group(BaseGroup): pass class Player(BasePlayer): role_in_task = models.StringField() q1 = models.IntegerField( choices=[ [1, '10 centavos'], [2, '50 centavos'], [3, '5 centavos'], ], widget=widgets.RadioSelect, label="Un bate y una pelota cuestan $1.10 en total. El bate cuesta $1.00 más que la pelota. ¿Cuánto cuesta la pelota? " ) q2 = models.IntegerField( choices=[ [1, '10 minutos'], [2, '5 minutos'], [3, '100 minutos'], ], widget=widgets.RadioSelect, label="Si 5 máquinas se demoran 5 minutos para hacer 5 artículos, ¿cuánto tiempo les tomaría a 100 máquinas hacer 100 artículos? " ) q3 = models.IntegerField( choices=[ [1, '47 días'], [2, '10 días'], [3, '24 días'], ], widget=widgets.RadioSelect, label="En un lago hay un segmento de almohadillas de lirios y cada día ese segmento dobla su tamaño. Si el segmento tarda 48 días en cubrir el lago, ¿cuánto tardará el segmento en cubrir la mitad del lago? " ) q4 = models.IntegerField( choices=[ [1, 'Hombre'], [2, 'Mujer'], [3, 'Otro'], ], label="¿Con qué género se identifica?", widget=widgets.RadioSelect) q5 = models.IntegerField(label="Edad", min=0, max=100,) q6 = models.IntegerField( choices=[ [1, ''], [2, ''], [3, ''], [4, ''],], doc="""""", widget=widgets.RadioSelect ) q7 = models.IntegerField( choices=[ [1, ''], [2, ''], [3, ''], [4, ''], [5, ''], [6, ''], [7, ''], [8, ''], [9, ''], [10,'']], doc="""""", min=0, max=10, widget=widgets.RadioSelect ) q8 = models.IntegerField( choices=[ [1, ''], [2, ''], [3, ''], [4, ''], [5, ''], [6, ''], [7, ''], [8, ''], [9, ''], [10,'']], doc="""""", min=0, max=10, widget=widgets.RadioSelect ) q9 = models.IntegerField( choices=[ [1,''], [2,''], [3,''], [4,'']], widget=widgets.RadioSelect ) q10a = models.IntegerField( choices=[ [1,''], [2,''], [3,''], [4,'']], widget=widgets.RadioSelect ) q10b = models.IntegerField( choices=[ [1,''], [2,''], [3,''], [4,'']], widget=widgets.RadioSelect ) q10c = models.IntegerField( choices=[ [1,''], [2,''], [3,''], [4,'']], widget=widgets.RadioSelect ) q10d = models.IntegerField( choices=[ [1,''], [2,''], [3,''], [4,'']], widget=widgets.RadioSelect ) q11 = models.IntegerField( choices=[ [1,''], [2,''], [3,''], [4,''], [5,''], [6,'']], widget=widgets.RadioSelect, label= "¿De acuerdo a las facturas de sus servicios cuál es el estrato de su actual vivienda o de su barrio?" ) q12 = models.IntegerField( choices=[ [1,'Primaria'], [2,'Bachillerato'], [3,'Algún semestre universitario, pero no graduado '], [5,'Técnico o Tecnólogo'], [4,'Universitario'] ], label="¿Cuál es su nivel educativo?", widget=widgets.RadioSelect ) q13 = models.IntegerField( choices=[ [1,'Primaria'], [2,'Bachillerato'], [3,'Algún semestre universitario, pero no graduado '], [5,'Técnico o Tecnólogo'], [4,'Universitario'] ], label="¿Cuál es el nivel de educación de su padre?", widget=widgets.RadioSelect) q14 = models.IntegerField( choices=[ [1,'Primaria'], [2,'Bachillerato'], [3,'Algún semestre universitario, pero no graduado '], [5,'Técnico o Tecnólogo'], [4,'Universitario'] ], label="¿Cuál es el nivel de educación de su madre?", widget=widgets.RadioSelect) q15 = models.IntegerField( choices=[ [1, 'Director o Gerente'], [2,'Profesional científico o intelectual' ], [3,'Técnico o profesional de nivel medio'], [4,'Personal de apoyo administrativo'], [5,'Trabajador de los servicios o vendedor de comercios y mercados '], [6,'Agricultor o trabajador calificado agropecuario, forestal y pesquero'], [7,'Oficial, operario o artesano de artes mecánicas y de otros oficios'], [8,'Operador de instalaciones y máquinas ensambladoras'], [9,'Ocupación elemental'], [10,'Ocupación militar'], [11,'Desocupado, jubilado, amo de casa'] ], label=" ¿Cuál es la actual ocupación de su padre? ", widget=widgets.RadioSelect) q16 = models.IntegerField( choices=[ [1, 'Director o Gerente'], [2,'Profesional científico o intelectual' ], [3,'Técnico o profesional de nivel medio'], [4,'Personal de apoyo administrativo'], [5,'Trabajador de los servicios o vendedor de comercios y mercados '], [6,'Agricultor o trabajador calificado agropecuario, forestal y pesquero'], [7,'Oficial, operario o artesano de artes mecánicas y de otros oficios'], [8,'Operador de instalaciones y máquinas ensambladoras'], [9,'Ocupación elemental'], [10,'Ocupación militar'], [11,'Desocupado, jubilado, amo de casa'] ], label=" ¿Cuál es la actual ocupación de su madre? ", widget=widgets.RadioSelect) q17 = models.IntegerField( choices=[ [1,''], [2,''], [3,''], [4,'']], widget=widgets.RadioSelect ) q20 = models.StringField(label="Por quién votó en las elecciones anteriores?") q18 = models.StringField(label="Si se votara hoy, ¿por cuál partido político votaría?") #q181 = models.BooleanField(blank=True, initial=False) q19 = models.IntegerField( choices=[ [1, ''], [2, ''], [3, ''], [4, ''], [5, ''], [6, ''], [7, ''], [8, ''], [9, ''], [10,'']], doc="""""", min=0, max=10, widget=widgets.RadioSelect, label="En política se habla normalmente de 'izquierda' y 'derecha'. En una escala dónde '0' es la “izquierda” y '10' la “derecha”, ¿dónde se ubicaría Ud.?" ) q21 = models.IntegerField( choices=[ [1, 'Seguramente votaré'], [2,'Probablemente votaré' ], [3,'No sé '], [4,'Probablemente no votaré'], [5,' No votaré '], ], label=" ¿Qué probabilidad tiene de votar en las próximas elecciones? ", widget=widgets.RadioSelect) codigo = models.StringField() @staticmethod def get_final_payoff(player, subs): ''' Función que suma el pago de las dos aplicaciones que se seleccionarion para pago. ''' player.payoff = player.participant.vars[Constants.tasks[subs.actividad_pago1 -1].get('payoff')] + player.participant.vars[Constants.tasks[subs.actividad_pago2 -1].get('payoff')] # PAGES class Resultados(Page): @staticmethod def vars_for_template(player: Player): subsession = player.subsession get_final_payoff(player, subsession) player.role_in_task = player.participant.vars['role_s' + str(Constants.tasks[subsession.actividad_pago1-1].get('section')) + '_' + str(Constants.tasks[subsession.actividad_pago1-1].get('task'))] if subsession.actividad_pago2 == 11: subsession.act2_color = player.participant.color3 elif subsession.actividad_pago2 == 10: subsession.act2_color = player.participant.color2 else: subsession.act2_color = player.participant.color1 return{ "Section1": Constants.tasks[subsession.actividad_pago1 - 1].get('section'), "Section2": Constants.tasks[subsession.actividad_pago2 - 1].get('section'), "actividad1": Constants.tasks[subsession.actividad_pago1 - 1].get('task'), "actividad2": Constants.tasks[subsession.actividad_pago2 - 1].get('task'), "color": "Rojo" if subsession.act2_color else "Negro", "rol": player.role_in_task, "fila_act1": player.participant.vars[Constants.tasks[subsession.actividad_pago1 - 1].get('fila')] + 1, "fila_act2": player.participant.vars[Constants.tasks[subsession.actividad_pago2 - 1].get('fila')] + 1, "payoff1": player.participant.vars[Constants.tasks[subsession.actividad_pago1 -1 ].get('payoff')], "payoff2": player.participant.vars[Constants.tasks[subsession.actividad_pago2 -1 ].get('payoff')], "pago": player.payoff, "pago_cop": player.participant.payoff_plus_participation_fee(), } class Formulario(Page): form_model = 'player' form_fields = ['q1', 'q2','q3', 'q4', 'q5', 'q6','q7', 'q8', 'q9','q10a','q10b','q10c','q10d', 'q11', 'q12','q13','q14','q15','q16','q17','q18',#'q181', 'q19','q20','q21',] class Fin(Page): def vars_for_template(player): #TODO: BORRAR ESTO ANTES DE DEPLOY FINALMENTE #player.participant.vars['codigo'] = str(random.randint(1, 1000)) player.codigo = player.participant.vars['codigo'] page_sequence = [Resultados, Formulario, Fin]