from otree.api import Currency as c, currency_range from ._builtin import Page, WaitPage from .models import Constants import random import json # Pages to display always (common pages) class Instruction_woman(Page): def is_displayed(self): return self.player.id_in_group == 1 and self.round_number == 1 class Instruction_man(Page): def is_displayed(self): return self.player.id_in_group == 2 and self.round_number == 1 class Treatment(Page): def is_displayed(self): return self.round_number == 1 form_model = "player" form_fields = ["enumerator_ID", "practice", "HHID", "person_id" ] class people_watching(Page): def is_displayed(self): return self.round_number == 1 and self.group.treatment == 2 form_model = "player" form_fields = ["people_watching", "public_schedule"] class understanding1(Page): def is_displayed(self): return self.round_number == 1 form_model = "player" form_fields = ["understand1"] class understanding1a(Page): def is_displayed(self): return self.round_number == 1 form_model = "player" form_fields = ["understand1a"] class understanding1b(Page): def is_displayed(self): return self.round_number == 1 form_model = "player" form_fields = ["understand1b"] class understanding1c(Page): def is_displayed(self): return self.round_number == 1 form_model = "player" form_fields = ["understand1c"] class understanding2(Page): def is_displayed(self): return self.round_number == 1 form_model = "player" form_fields = ["understand2"] class understanding2a(Page): def is_displayed(self): return self.round_number == 1 form_model = "player" form_fields = ["understand2a"] class understanding2b(Page): def is_displayed(self): return self.round_number == 1 form_model = "player" form_fields = ["understand2b"] class understanding2c(Page): def is_displayed(self): return self.round_number == 1 and self.group.treatment != 1 form_model = "player" form_fields = ["understand2c"] class understanding2c_cons(Page): def is_displayed(self): return self.round_number == 1 and self.group.treatment == 1 form_model = "player" form_fields = ["understand2c_cons"] ### EX ANTE ########################################################################################## class pe_intropractice_woman_EA(Page): def is_displayed(self): return self.group.type == 'EA' and self.player.id_in_group == 1 and self.round_number == 1 class pe_intropractice_woman_EA_2(Page): def is_displayed(self): return self.group.type == 'EA' and self.player.id_in_group == 1 and self.round_number == 1 class signaling_w(Page): def is_displayed(self): return self.player.id_in_group == 1 and self.round_number == 1 class signaling_m(Page): def is_displayed(self): return self.player.id_in_group == 2 and self.round_number == 1 form_model = 'group' form_fields = ['signaling'] class signaling_wait(WaitPage): def is_displayed(self): return self.player.id_in_group == 1 and self.round_number == 1 title_text = "Waiting" body_text = "Waiting to know how much the man donated" class pe_exante_1_w(Page): def is_displayed(self): return self.player.id_in_group == 1 and self.group.type == 'EA' and self.round_number == 1 class pe_exante_1_m(Page): def is_displayed(self): return self.player.id_in_group == 2 and self.group.type == 'EA' and self.round_number == 1 class pe_exante_preschedule(Page): def is_displayed(self): return self.player.id_in_group == 2 and self.group.type == 'EA' and self.round_number == 1 # PAGE RANDOMIZATION FOR EXANTE STARTS HERE class pe_exante_schedule_1(Page): def before_next_page(self): self.player.guess_be01a_man() def is_displayed(self): return self.player.id_in_group == 2 and self.group.type == 'EA' and self.round_number == self.participant.vars['task_rounds']['1'] form_model = "player" form_fields = ["be01a_man"] class pe_exante_schedule_2(Page): def before_next_page(self): self.player.guess_be01b_man() def is_displayed(self): return self.player.id_in_group == 2 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 pe_exante_schedule_3(Page): def before_next_page(self): self.player.guess_be02a_man() def is_displayed(self): return self.player.id_in_group == 2 and self.group.type == 'EA' and self.round_number == self.participant.vars['task_rounds']['3'] form_model = "player" form_fields = ["be02a_man"] # print(self.participant.vars.get('be02a_manst')) class pe_exante_schedule_4(Page): def before_next_page(self): self.player.guess_be02b_man() def is_displayed(self): return self.player.id_in_group == 2 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 pe_exante_postschedule(Page): def is_displayed(self): return self.player.id_in_group == 2 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.player.id_in_group == 1 and self.group.type == 'EA' and self.round_number == Constants.num_rounds class pe_exante_2_w(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.player.id_in_group == 1 and self.group.subtreatment != 1 and self.group.type == 'EA' and self.round_number == Constants.num_rounds class pe_exante_2tr_w(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.player.id_in_group == 1 and self.group.subtreatment == 1 and self.group.type == 'EA' and self.round_number == Constants.num_rounds class pe_exante_3_w_10tk(Page): def is_displayed(self): return self.player.id_in_group == 1 and self.group.type == 'EA' and self.round_number == Constants.num_rounds form_model = "group" form_fields = ["be02"] class RiceWaitPage(WaitPage): def is_displayed(self): return self.player.id_in_group == 2 and self.group.type == 'EA' and self.round_number == Constants.num_rounds class pe_exante_3_w(Page): def vars_for_template(self): return self.player.vars_for_template() def is_displayed(self): return self.player.id_in_group == 1 and self.group.type == 'EA' and self.round_number == Constants.num_rounds class pe_exante_woman_outside(Page): def is_displayed(self): return self.player.id_in_group == 1 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 pe_exante_4_w(Page): def vars_for_template(self): return self.player.vars_for_template() def is_displayed(self): return self.player.id_in_group == 1 and self.group.type == 'EA' and self.round_number == Constants.num_rounds class pe_exante_men_jar(Page): def is_displayed(self): return self.player.id_in_group == 2 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 Waitforjar(WaitPage): def is_displayed(self): return self.player.id_in_group == 1 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 outside_waitpage(WaitPage): def is_displayed(self): return self.player.id_in_group == 2 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 ######################################################################################################## ### EX POST COLD ####################################################################################################### class pe_expostcold_1_man(Page): def is_displayed(self): return self.player.id_in_group == 2 and self.group.type == 'EPC' and self.round_number == 1 class pe_expost_intropractice_woman_EPC(Page): def is_displayed(self): return self.player.id_in_group == 1 and self.group.type == 'EPC' and self.round_number == 1 form_model = "group" form_fields = ["riceplate_practice"] class pe_expost_intropractice_woman_EPC_2(Page): def is_displayed(self): return self.player.id_in_group == 1 and self.group.type == 'EPC' and self.round_number == 1 class pe_expostcold_intro_woman(Page): def is_displayed(self): return self.player.id_in_group == 1 and self.group.type == 'EPC' and self.round_number == 1 class pe_expostcold_1_woman(Page): def is_displayed(self): return self.player.id_in_group == 1 and self.group.type == 'EPC' and self.round_number == Constants.num_rounds form_model = "group" form_fields = ["be01"] def before_next_page(self): self.participant.vars['be01'] = self.group.be01 class RiceWaitPage2(WaitPage): def is_displayed(self): return self.player.id_in_group == 2 and self.group.type == 'EPC' and self.round_number == Constants.num_rounds title_text = "Waiting" body_text = "Waiting for the woman to make her choice EPC constant round" class RiceWaitPage2_round1(WaitPage): def is_displayed(self): return self.player.id_in_group == 2 and self.group.type == 'EPC' and self.round_number == 1 title_text = "Waiting" body_text = "Waiting for the woman to make her choice EPC round == 1" # fake page only to give the impression to the man that he is actually waiting for smt class pe_man_prerandomization_EPC(Page): def is_displayed(self): return self.player.id_in_group == 2 and self.group.type == 'EPC' and self.round_number == 1 ### EX POST COLD RANDOMIZATION START class pe_expostcold_2_man(Page): def is_displayed(self): return self.player.id_in_group == 2 and self.group.type == 'EPC' and self.round_number == self.participant.vars['task_rounds']['1'] form_model = "player" form_fields = ["be01a_man"] def before_next_page(self): self.player.guess_be01a_man() class pe_expostcold_2_man_transfer(Page): def is_displayed(self): return self.group.type == 'EPC' and self.group.subtreatment == 1 and self.player.id_in_group == 2 and self.round_number == self.participant.vars['task_rounds']['2'] form_model = "player" form_fields = ["be01b_man"] def before_next_page(self): self.player.guess_be01b_man() class pe_expostcold_3_man(Page): def is_displayed(self): return self.player.id_in_group == 2 and self.group.type == 'EPC' and self.round_number == self.participant.vars['task_rounds']['3'] form_model = "player" form_fields = ["be02a_man"] def before_next_page(self): self.player.guess_be02a_man() class pe_expostcold_3_man_transfer(Page): def is_displayed(self): return self.group.type == 'EPC' and self.group.subtreatment == 1 and self.player.id_in_group == 2 and self.round_number == self.participant.vars['task_rounds']['4'] form_model = "player" form_fields = ["be02b_man"] def before_next_page(self): self.player.guess_be02b_man() ### EX POST COLD RANDOMIZATION END class ScheduleWaitPage2(WaitPage): def is_displayed(self): return self.player.id_in_group == 1 and self.group.type == 'EPC' and self.round_number == Constants.num_rounds title_text = "Waiting" body_text = "Waiting to get how much you have to listen to the sound" class pe_expostcold_2_woman(Page): def vars_for_template(self): return self.player.vars_for_template() def is_displayed(self): return self.player.id_in_group == 1 and self.group.subtreatment != 1 and self.group.type == 'EPC' and self.round_number == Constants.num_rounds class pe_expostcold_2tr_woman(Page): def vars_for_template(self): return self.player.vars_for_template() def is_displayed(self): return self.player.id_in_group == 1 and self.group.subtreatment == 1 and self.group.type == 'EPC' and self.round_number == Constants.num_rounds class pe_expostcold_10taka_woman(Page): def is_displayed(self): return self.player.id_in_group == 1 and self.group.type == 'EPC' and self.round_number == Constants.num_rounds form_model = "group" form_fields = ["be02"] class pe_expostcold_3_woman(Page): def vars_for_template(self): return self.player.vars_for_template() def is_displayed(self): return self.player.id_in_group == 1 and self.group.type == 'EPC' and self.round_number == Constants.num_rounds class pe_expostcold_3_woman_outside(Page): def vars_for_template(self): return self.player.vars_for_template() def is_displayed(self): return self.player.id_in_group == 1 and self.group.type == 'EPC' and self.group.subtreatment == 2 and self.round_number == Constants.num_rounds form_model = "group" form_fields = ["be03_w"] class pe_expostcold_4_man(Page): def is_displayed(self): return self.player.id_in_group == 2 and self.group.type == 'EPC' 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 Waitforjar2(WaitPage): def is_displayed(self): return self.player.id_in_group == 1 and self.group.type == 'EPC' and self.round_number == Constants.num_rounds class outside_waitpage2(WaitPage): def is_displayed(self): return self.player.id_in_group == 2 and self.group.subtreatment == 2 and self.group.type == 'EPC' and self.round_number == Constants.num_rounds ### EX POST COLD END ################################################################################################### ### EX POST HOT START ################################################################################################## class pe_exposthot_intro_man(Page): def is_displayed(self): return self.player.id_in_group == 2 and self.group.type == 'EPH' and self.round_number == 1 class pe_expost_intropractice_woman_EPH(Page): def is_displayed(self): return self.player.id_in_group == 1 and self.group.type == 'EPH' and self.round_number == 1 form_model = "group" form_fields = ["riceplate_practice"] class pe_expost_intropractice_woman_EPH_2(Page): def is_displayed(self): return self.player.id_in_group == 1 and self.group.type == 'EPH' and self.round_number == 1 class pe_exposthot_1_woman(Page): def is_displayed(self): return self.player.id_in_group == 1 and self.group.type == 'EPH' and self.round_number == 1 form_model = "group" form_fields = ["be01"] # TB: save in participant var player field be01 def before_next_page(self): self.participant.vars['be01'] = self.group.be01 class RiceWaitPage3(WaitPage): def is_displayed(self): return self.player.id_in_group == 2 and self.group.type == 'EPH' and self.round_number == 1 title_text = "Waiting" body_text = "Waiting for the woman to make her choice EPH constant round" class RiceWaitPage3_round1(WaitPage): def is_displayed(self): return self.player.id_in_group == 2 and self.group.type == 'EPH' and self.round_number == 1 title_text = "Waiting" body_text = "Waiting for the woman to make her choice" class pe_exposthot_1_man(Page): def is_displayed(self): return self.player.id_in_group == 2 and self.group.type == 'EPH' and self.round_number == 1 def before_next_page(self): self.participant.vars['be01'] = self.group.be01 ### EX POST HOT RANDOMIZATION ########################################################################################## class pe_exposthot_schedule_1(Page): def before_next_page(self): self.player.guess_be01a_man() def is_displayed(self): return self.player.id_in_group == 2 and self.group.type == 'EPH' and self.round_number == self.participant.vars['task_rounds']['2'] form_model = "player" form_fields = ["be01a_man"] class pe_exposthot_schedule_2(Page): def before_next_page(self): self.player.guess_be01b_man() def is_displayed(self): return self.group.type == 'EPH' and self.group.subtreatment == 1 and self.player.id_in_group == 2 and self.round_number == self.participant.vars['task_rounds']['4'] form_model = "player" form_fields = ["be01b_man"] class pe_exposthot_schedule_3(Page): def before_next_page(self): self.player.guess_be02a_man() def is_displayed(self): return self.player.id_in_group == 2 and self.group.type == 'EPH' and self.round_number == self.participant.vars['task_rounds']['1'] form_model = "player" form_fields = ["be02a_man"] class pe_exposthot_schedule_4(Page): def before_next_page(self): self.player.guess_be02b_man() def is_displayed(self): return self.group.type == 'EPH' and self.group.subtreatment == 1 and self.player.id_in_group == 2 and self.round_number == self.participant.vars['task_rounds']['3'] form_model = "player" form_fields = ["be02b_man"] class ScheduleWaitPage3(WaitPage): def is_displayed(self): return self.player.id_in_group == 1 and self.round_number == self.round_number == Constants.num_rounds title_text = "Waiting" body_text = "Waiting to get how much you have to listen to the sound" class ScheduleWaitPage3_round1(WaitPage): def is_displayed(self): return self.player.id_in_group == 1 and (self.round_number == 1 or self.round_number == 2 or self.round_number == 3 or self.round_number == 4) title_text = "Waiting" body_text = "Waiting to get how much you have to listen to the sound" class ScheduleWaitPage3_round2(WaitPage): def is_displayed(self): return self.player.id_in_group == 1 and self.round_number == 2 title_text = "Waiting" body_text = "Waiting to get how much you have to listen to the sound" class ScheduleWaitPage3_round3(WaitPage): def is_displayed(self): return self.player.id_in_group == 1 and self.round_number == 3 title_text = "Waiting" body_text = "Waiting to get how much you have to listen to the sound" class ScheduleWaitPage3_round4(WaitPage): def is_displayed(self): return self.player.id_in_group == 1 and self.round_number == 4 title_text = "Waiting" body_text = "Waiting to get how much you have to listen to the sound" class pe_exposthot_3_man(Page): def is_displayed(self): return self.player.id_in_group == 2 and self.group.type == 'EPH' and self.round_number == Constants.num_rounds form_model = "group" form_fields = ["be03"] class Waitforjar3(WaitPage): def is_displayed(self): return self.player.id_in_group == 1 and self.group.type == 'EPH' and self.round_number == Constants.num_rounds class pe_exposthot_2_woman(Page): def vars_for_template(self): return self.player.vars_for_template() def is_displayed(self): return self.player.id_in_group == 1 and self.group.subtreatment != 1 and self.group.type == 'EPH' and self.round_number == Constants.num_rounds class pe_exposthot_2tr_woman(Page): def vars_for_template(self): return self.player.vars_for_template() def is_displayed(self): return self.player.id_in_group == 1 and self.group.subtreatment == 1 and self.group.type == 'EPH' and self.round_number == Constants.num_rounds class pe_exposthot_3_woman(Page): def vars_for_template(self): return self.player.vars_for_template() def is_displayed(self): return self.player.id_in_group == 1 and self.group.type == 'EPH' and self.round_number == Constants.num_rounds class pe_exposthot_3_woman_outside(Page): def is_displayed(self): return self.player.id_in_group == 1 and self.group.subtreatment == 2 and self.group.type == 'EPH' and self.round_number == Constants.num_rounds form_model = "group" form_fields = ["be03_w"] class pe_exposthot_10taka_woman(Page): def is_displayed(self): return self.player.id_in_group == 1 and self.group.type == 'EPH' and self.round_number == Constants.num_rounds form_model = "group" form_fields = ["be02"] class outside_waitpage3(WaitPage): def is_displayed(self): return self.player.id_in_group == 2 and self.group.subtreatment == 2 and self.group.type == 'EPH' and self.round_number == Constants.num_rounds ### EX POST HOT END #################################################################################################### ### END COMMON PAGES ################################################################################################### class pe_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 pe_end_tr(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 thank_you(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 extra_comments(Page): def is_displayed(self): return self.round_number == Constants.num_rounds form_model = "player" form_fields = ['extra_comment'] page_sequence = [ Treatment, people_watching, Instruction_woman, Instruction_man, pe_intropractice_woman_EA, pe_intropractice_woman_EA_2, signaling_m, signaling_wait, signaling_w, pe_exante_1_w, pe_exante_1_m, pe_exante_preschedule, pe_exante_schedule_1, pe_exante_schedule_2, pe_exante_schedule_3, pe_exante_schedule_4, ScheduleWaitPage, pe_exante_postschedule, pe_exante_2_w, pe_exante_2tr_w, RiceWaitPage, pe_exante_woman_outside, outside_waitpage, pe_exante_3_w_10tk, pe_exante_4_w, pe_exante_men_jar, Waitforjar, # Treatment, # Instruction_woman, # Instruction_man, pe_expostcold_1_man, pe_expost_intropractice_woman_EPC, pe_expost_intropractice_woman_EPC_2, pe_expostcold_intro_woman, pe_expostcold_1_woman, pe_man_prerandomization_EPC, pe_expostcold_2_man, pe_expostcold_2_man_transfer, pe_expostcold_3_man, pe_expostcold_3_man_transfer, RiceWaitPage2, ScheduleWaitPage2, pe_expostcold_2_woman, pe_expostcold_2tr_woman, pe_expostcold_3_woman_outside, pe_expostcold_4_man, outside_waitpage2, pe_expostcold_10taka_woman, pe_expostcold_3_woman, Waitforjar2, # Treatment, # Instruction_woman, # Instruction_man, pe_expost_intropractice_woman_EPH, pe_expost_intropractice_woman_EPH_2, pe_exposthot_intro_man, pe_exposthot_1_woman, RiceWaitPage3_round1, # RiceWaitPage3, pe_exposthot_1_man, pe_exposthot_schedule_1, pe_exposthot_schedule_2, pe_exposthot_schedule_3, pe_exposthot_schedule_4, ScheduleWaitPage3, ScheduleWaitPage3_round1, ScheduleWaitPage3_round2, ScheduleWaitPage3_round3, ScheduleWaitPage3_round4, pe_exposthot_2_woman, pe_exposthot_2tr_woman, pe_exposthot_3_woman_outside, pe_exposthot_10taka_woman, pe_exposthot_3_man, outside_waitpage3, pe_exposthot_3_woman, Waitforjar3, pe_end, pe_end_tr, feedback1, feedback2, extra_comments, thank_you ]