from otree.api import Currency as c, currency_range from ._builtin import Page, WaitPage from .models import Constants import random import json class InitialSelection(Page): def is_displayed(self): return self.round_number == 1 form_model = 'group' form_fields = ['type', 'treatment', 'subtreatment'] class WaitForInitialSelection(WaitPage): pass class Gender(Page): def is_displayed(self): return self.round_number == 1 form_model = 'player' form_fields = ['gender'] def before_next_page(self): self.participant.vars['gender'] = self.player.gender class Treatment(Page): def is_displayed(self): return self.round_number == 1 form_model = "player" form_fields = ["enumerator_ID", "practice", "HHID", "person_id", ] class PeopleWatching(Page): def is_displayed(self): return self.round_number == 1 and self.group.treatment == 2 form_model = "player" form_fields = ["nrchildren", "public_schedule", "men1625", "men2550", "menover50", "women1625", "women2550", "womenover50"] # Pages to display always (common pages) class InstructionW(Page): def is_displayed(self): return self.participant.vars['gender'] == 'W' and self.round_number == 1 class InstructionM(Page): def is_displayed(self): return self.participant.vars['gender'] == 'M' and self.round_number == 1 # EX ANTE VERSION ###################################################################################################### class EAPracticeW(Page): def is_displayed(self): return self.group.type == 'EA' and self.participant.vars['gender'] == 'W' and self.round_number == 1 class EAPracticeW2(Page): def is_displayed(self): return self.group.type == 'EA' and self.participant.vars['gender'] == 'W' and self.round_number == 1 class EADescriptionW(Page): def is_displayed(self): return self.participant.vars['gender'] == 'W' and self.group.type == 'EA' and self.round_number == 1 class EADescriptionM(Page): def is_displayed(self): return self.participant.vars['gender'] == 'M' and self.group.type == 'EA' and self.round_number == 1 class EAPreScheduleM(Page): def is_displayed(self): return self.participant.vars['gender'] == 'M' and self.group.type == 'EA' and self.round_number == 1 # PAGE RANDOMIZATION FOR EXANTE STARTS HERE class EASchedule1M(Page): def before_next_page(self): self.player.guess_be01a_man() def is_displayed(self): return self.participant.vars['gender'] == 'M' and self.group.type == 'EA' and self.round_number == self.participant.vars['task_rounds']['1'] form_model = "player" form_fields = ["be01a_man", "checkslider"] def error_message_checkslider(self, value): if not value: return "Please make your decision using slider" class EAConfirmationBe01a(Page): def vars_for_template(self): return {'be01a_stored_m': self.participant.vars['be01a_man_st'] } def is_displayed(self): return self.participant.vars['gender'] == 'M' and self.group.type == 'EA' and self.round_number == self.participant.vars['task_rounds']['1'] form_model = "player" form_fields = ["confirmation_be01a"] class EASchedule1BisM(Page): def before_next_page(self): self.player.guess_be01a_man() def is_displayed(self): return self.player.confirmation_be01a == 1 and self.participant.vars['gender'] == 'M' and self.group.type == 'EA' and self.round_number == self.participant.vars['task_rounds']['1'] form_model = "player" form_fields = ["be01a_man"] class EASchedule2M(Page): def before_next_page(self): self.player.guess_be01b_man() def is_displayed(self): return self.participant.vars['gender'] == 'M' and self.group.type == 'EA' and self.group.subtreatment == 1 and self.round_number == self.participant.vars['task_rounds']['2'] form_model = "player" form_fields = ["be01b_man", "checkslider"] def error_message_checkslider(self, value): if not value: return "Please make your decision using slider" class EAConfirmationBe01b(Page): def vars_for_template(self): return {'be01b_stored_m': self.participant.vars['be01b_man_st'] } def is_displayed(self): return self.participant.vars['gender'] == 'M' and self.group.type == 'EA' and self.group.subtreatment == 1 and self.round_number == self.participant.vars['task_rounds']['2'] form_model = "player" form_fields = ["confirmation_be01b"] # def before_next_page(self): # self.participant.vars['confirmation_be01b'] = self.player.confirmation_be01b class EASchedule2BisM(Page): def before_next_page(self): self.player.guess_be01b_man() def is_displayed(self): return self.player.confirmation_be01b == 1 and self.participant.vars['gender'] == 'M' and self.group.type == 'EA' and self.group.subtreatment == 1 and self.round_number == self.participant.vars['task_rounds']['2'] form_model = "player" form_fields = ["be01b_man"] class EASchedule3M(Page): def before_next_page(self): self.player.guess_be02a_man() def is_displayed(self): return self.participant.vars['gender'] == 'M' and self.group.type == 'EA' and self.round_number == self.participant.vars['task_rounds']['3'] form_model = "player" form_fields = ["be02a_man", "checkslider"] def error_message_checkslider(self, value): if not value: return "Please make your decision using slider" class EAConfirmationBe02a(Page): def vars_for_template(self): return {'be02a_stored_m': self.participant.vars['be02a_man_st'] } def is_displayed(self): return self.participant.vars['gender'] == 'M' and self.group.type == 'EA' and self.round_number == self.participant.vars['task_rounds']['3'] form_model = "player" form_fields = ["confirmation_be02a"] class EASchedule3BisM(Page): def before_next_page(self): self.player.guess_be02a_man() def is_displayed(self): return self.player.confirmation_be02a == 1 and self.participant.vars['gender'] == 'M' and self.group.type == 'EA' and self.round_number == self.participant.vars['task_rounds']['3'] form_model = "player" form_fields = ["be02a_man"] class EASchedule4M(Page): def before_next_page(self): self.player.guess_be02b_man() def is_displayed(self): return self.participant.vars['gender'] == 'M' and self.group.type == 'EA'and self.group.subtreatment == 1 and self.round_number == self.participant.vars['task_rounds']['4'] form_model = "player" form_fields = ["be02b_man", "checkslider"] def error_message_checkslider(self, value): if not value: return "Please make your decision using slider" class EAConfirmationBe02b(Page): def vars_for_template(self): return {'be02b_stored_m': self.participant.vars['be02b_man_st'] } def is_displayed(self): return self.participant.vars['gender'] == 'M' and self.group.subtreatment == 1 and self.group.type == 'EA' and self.round_number == self.participant.vars['task_rounds']['4'] form_model = "player" form_fields = ["confirmation_be02b"] class EASchedule4BisM(Page): def before_next_page(self): self.player.guess_be02b_man() def is_displayed(self): return self.player.confirmation_be02b == 1 and self.participant.vars['gender'] == 'M' and self.group.type == 'EA' and self.group.subtreatment == 1 and self.round_number == self.participant.vars['task_rounds']['4'] form_model = "player" form_fields = ["be02b_man"] class EAPostScheduleM(Page): def is_displayed(self): return self.participant.vars['gender'] == 'M' and self.group.type == 'EA' and self.round_number == Constants.num_rounds form_model = "player" form_fields = ["punishment_work"] # END RANDOMIZATION EX ANTE ############################################################################################ class ScheduleWaitPage(WaitPage): def is_displayed(self): return self.participant.vars['gender'] == 'W' and self.group.type == 'EA' and self.round_number == Constants.num_rounds class EAScheduleListenW(Page): def vars_for_template(self): return self.player.vars_for_template() form_model = "group" form_fields = ["be01"] def before_next_page(self): self.participant.vars['be01'] = self.group.be01 def is_displayed(self): return self.participant.vars['gender'] == 'W' and self.group.subtreatment != 1 and self.group.type == 'EA' and self.round_number == Constants.num_rounds class EAScheduleListenTransW(Page): def vars_for_template(self): return self.player.vars_for_template() form_model = "group" form_fields = ["be01"] def before_next_page(self): self.participant.vars['be01'] = self.group.be01 def is_displayed(self): return self.participant.vars['gender'] == 'W' and self.group.subtreatment == 1 and self.group.type == 'EA' and self.round_number == Constants.num_rounds ### SPITE PAGES class EAPlateSpite(Page): def is_displayed(self): return self.participant.vars['gender'] == 'M' and self.group.type == 'EA' and self.round_number == Constants.num_rounds class EAScheduleSoundSpite(Page): def is_displayed(self): return self.participant.vars['gender'] == 'M' and self.group.type == 'EA' and self.round_number == Constants.num_rounds form_model = "group" form_fields = ["sound_spite"] class EAScheduleMoneySpite(Page): def is_displayed(self): return self.participant.vars['gender'] == 'M' and self.group.type == 'EA' and self.group.subtreatment == 1 and self.round_number == Constants.num_rounds form_model = "group" form_fields = ["money_spite"] class ScheduleWaitPage_FAKE(WaitPage): def is_displayed(self): return self.participant.vars['gender'] == 'W' and self.group.type == 'EA' and self.round_number == Constants.num_rounds title_text = "Waiting for spite 1" body_text = "Waiting for the real schedule 1" ################################ class EAScheduleListenSpite(Page): def is_displayed(self): return self.player.id_in_group == 1 and self.group.type == 'EA' and self.round_number == Constants.num_rounds def vars_for_template(self): return self.player.vars_for_template() class EAListenDecideW(Page): def is_displayed(self): return self.participant.vars['gender'] == 'W' and self.group.type == 'EA' and self.round_number == Constants.num_rounds form_model = "group" form_fields = ["be02"] class EAListenDecideM(Page): def is_displayed(self): return self.participant.vars['gender'] == 'M' and self.group.type == 'EA' and self.round_number == Constants.num_rounds form_model = "player" form_fields = ["sound_decide_m"] class RiceWaitPage(WaitPage): def is_displayed(self): return self.participant.vars['gender'] == 'M' and self.group.type == 'EA' and self.round_number == Constants.num_rounds class pe_exante_woman_outside(Page): def is_displayed(self): return self.participant.vars['gender'] == 'W' and self.group.subtreatment == 2 and self.group.type == 'EA' and self.round_number == Constants.num_rounds form_model = "group" form_fields = ["be03_w"] class EASoundListenW(Page): def vars_for_template(self): return self.player.vars_for_template() def is_displayed(self): return self.participant.vars['gender'] == 'W' and self.group.type == 'EA' and self.round_number == Constants.num_rounds class EABeadM(Page): def is_displayed(self): return self.participant.vars['gender'] == 'M' and self.group.type == 'EA' and self.round_number == Constants.num_rounds form_model = "group" form_fields = ["be03"] def before_next_page(self): self.participant.vars['be01'] = self.group.be01 class WaitForBead(WaitPage): def is_displayed(self): return self.participant.vars['gender'] == 'W' and self.group.type == 'EA' and self.round_number == Constants.num_rounds title_text = "Waiting" body_text = "Waiting to know which jar the pan picked EA" class OutsideWaitPage(WaitPage): def is_displayed(self): return self.participant.vars['gender'] == 'M' and self.group.subtreatment == 2 and self.group.type == 'EA' and self.round_number == Constants.num_rounds title_text = "Waiting" body_text = "Waiting to understand if the woman had an outside option EA" ### EX ANTE END ######################################################################################################## ### END COMMON PAGES ################################################################################################### class End(Page): def vars_for_template(self): return self.player.vars_for_template() def is_displayed(self): return self.group.subtreatment != 1 and self.round_number == Constants.num_rounds class EndTransfer(Page): def vars_for_template(self): return self.player.vars_for_template() def is_displayed(self): return self.group.subtreatment == 1 and self.round_number == Constants.num_rounds class ThankYou(Page): def is_displayed(self): return self.round_number == Constants.num_rounds class Feedback1(Page): def is_displayed(self): return self.round_number == Constants.num_rounds form_model = "player" form_fields = ['feedback1'] class Feedback2(Page): def is_displayed(self): return self.round_number == Constants.num_rounds form_model = "player" form_fields = ['feedback2'] class ExtraComments(Page): def is_displayed(self): return self.round_number == Constants.num_rounds form_model = "player" form_fields = ['extra_comment'] page_sequence = [ InitialSelection, WaitForInitialSelection, Gender, Treatment, PeopleWatching, InstructionW, InstructionM, EAPracticeW, EAPracticeW2, EADescriptionW, EADescriptionM, EAPreScheduleM, EASchedule1M, EAConfirmationBe01a, EASchedule1BisM, EASchedule2M, EAConfirmationBe01b, EASchedule2BisM, EASchedule3M, EAConfirmationBe02a, EASchedule3BisM, EASchedule4M, EAConfirmationBe02b, EASchedule4BisM, ScheduleWaitPage, EAPostScheduleM, EAScheduleListenW, EAScheduleListenTransW, RiceWaitPage, ### SPITE EAPlateSpite, EAScheduleSoundSpite, EAScheduleMoneySpite, ScheduleWaitPage_FAKE, EAScheduleListenSpite, ## pe_exante_woman_outside, OutsideWaitPage, EAListenDecideW, EASoundListenW, EABeadM, WaitForBead, EAListenDecideM, End, EndTransfer, Feedback1, Feedback2, ExtraComments, ThankYou ]