from otree.api import Currency as c, currency_range from ._builtin import Page, WaitPage from .models import Constants class DecideNegotiations(Page): form_model = 'player' form_fields = ['is_negotiating'] class BeforeWaitPage(WaitPage): def after_all_players_arrive(self): print('Groups: ' + str(self.subsession.get_group_matrix())) if (self.round_number-3) % Constants.experimental_rounds == 0: if self.session.vars.__contains__(Constants.session_key): self.session.vars[Constants.session_key] += 1 else: self.session.vars[Constants.session_key] = 1 elif self.round_number-3 == -2: self.session.vars[Constants.session_key] = 1 for group in self.subsession.get_groups(): group.start_group() def vars_for_template(self): return {'screen': 'before'} class TenantScreen(Page): def is_displayed(self): return self.player.role() == Constants.tenant_role and self.group.is_group_negotiating def vars_for_template(self): land_owner_channels = self.group.get_land_owner_channels() land_owner_ids = self.group.get_land_owner_ids() return {'tenant_messenger_1': land_owner_channels[0], 'tenant_messenger_2': land_owner_channels[1], 'tenant_messenger_3': land_owner_channels[2], 'land_owner_id_1': land_owner_ids[0], 'land_owner_id_2': land_owner_ids[1], 'land_owner_id_3': land_owner_ids[2], 'tenant_budget': Constants.tenant_budget, 'timeout': Constants.bargaining_time_secs } class LandOwnerScreen(Page): def is_displayed(self): return self.player.role() == Constants.land_owner_role and self.group.is_group_negotiating def vars_for_template(self): return {'my_messenger': self.player.get_channel(), 'tenant_messenger': 'tenant', 'tenant_budget': Constants.tenant_budget, 'timeout': Constants.bargaining_time_secs } class AfterWaitPage(WaitPage): def after_all_players_arrive(self): self.group.post_process() def vars_for_template(self): return {'screen': 'after'} class Results(Page): timer_text = 'Time left to view this page:' timeout_seconds = Constants.results_time_secs def is_displayed(self): return self.group.is_group_negotiating and not self.group.terminate def before_next_page(self): self.player.end_player() class NoNegotiationsHoldScreen(WaitPage): wait_for_all_groups = True def after_all_players_arrive(self): pass def vars_for_template(self): return {'screen': 'final'} page_sequence = [ DecideNegotiations, BeforeWaitPage, TenantScreen, LandOwnerScreen, AfterWaitPage, Results, NoNegotiationsHoldScreen ]