from pickle import TRUE from otree.api import Currency as c, currency_range from otree.api import Page, WaitPage from .models import Constants, Player, Group from random import choice, randint, shuffle class Introduction(Page): def is_displayed(self): # Esta página sólo se mostrará en la primera ronda return self.round_number == 1 class PersonalInformation(Page): form_model = 'player' form_fields = [ 'age', 'gender', 'other_gender', 'career', 'level', 'race', 'other_race', 'income', ] def before_next_page(self): if self.player.gender == 'Otros' and self.player.other_gender == '': self._is_valid = False self._form.add_error('other_gender', 'Por favor, especifica tu sexo.') if self.player.race == 'Otros' and self.player.other_race == '': self._is_valid = False self._form.add_error('other_race', 'Por favor, especifica cómo te identificas.') def is_displayed(self): # Esta página sólo se mostrará en la primera ronda return self.round_number == 1 class ControversialQuestions(Page): form_model = 'player' form_fields = [ 'tabaco', 'arte', 'violencia', 'pobreza', ] def is_displayed(self): # Esta página sólo se mostrará en la primera ronda return self.round_number == 1 def before_next_page(self): # Copia las respuestas a las preguntas controversiales a las rondas futuras if self.round_number == 1: for future_player in self.player.in_all_rounds()[1:]: future_player.tabaco = self.player.tabaco future_player.arte = self.player.arte future_player.violencia = self.player.violencia future_player.pobreza = self.player.pobreza class SomePageBeforeWaitPage(Page): def before_next_page(self): self.subsession.regroup_players() class WaitForAllPlayers(WaitPage): wait_for_all_groups = True def after_all_players_arrive(self): for group in self.subsession.get_groups(): group.current_question_index = self.round_number - 1 group.set_current_question() def is_displayed(self): #Esta página sólo se mostrará en la primera ronda return True class GroupInfo(Page): def vars_for_template(self): group_text = self.player.population_text question_text = self.group.current_question # Obtén la pregunta actual del grupo return {'group_text': group_text, 'question_text': question_text} class Beliefs(Page): form_model = 'player' form_fields = ['belief_p1', 'belief_p2', 'belief_p3'] # Agrega más campos si tienes más preguntas def is_displayed(self): # Esta página se mostrará después de la página 'GroupInfo' return self.round_number > 1 round1_sequence = [Introduction, PersonalInformation, ControversialQuestions, SomePageBeforeWaitPage, WaitForAllPlayers, GroupInfo, Beliefs] page_sequence = round1_sequence