import random from . import models from ._builtin import Page, WaitPage from .models import Constants from otree.common import safe_json class Introduction1(Page): pass class Introduction(Page): # only display instruction in round 1 def is_displayed(self): return self.subsession.round_number == 1 class Offer(Page): def is_displayed(self): if self.group.contract_accepted == False: return self.player.role() == 'principal' [self.group.principal_wage_offer] form_model = models.Group form_fields = ['principal_wage_offer'] class Offer1(Page): def is_displayed(self): if self.group.contract_accepted == True: return self.player.role() == 'agent' [self.group.principal_wage_offer, self.group.desired_agent_work_effort] form_model = models.Group form_fields = ['principal_wage_offer'] class OfferWaitPage(WaitPage): def vars_for_template(self): if self.player.role() == 'agent': body_text = "Please, wait for the employer to take his/her decision." else: body_text = "Please, wait for the worker to take his/her decision." return {'body_text': body_text} class Delegation(Page): def is_displayed(self): return self.player.role() == 'principal' form_model = models.Group form_fields = ['contract_accepted', 'desired_agent_work_effort'] timeout_submission = { #'contract_accepted': False, 'agent_work_effort': 1, } class WorkEffort(Page): def is_displayed(self): return self.player.role() == 'agent' form_model = models.Group form_fields = ['agent_work_effort'] #timeout_submission = { #'contract_accepted': False, #'agent_work_effort': 0, #} class ResultsWaitPage(WaitPage): def body_text(self): if self.player.role() == 'principal': return "Please, wait for the worker to take his/her decision." def after_all_players_arrive(self): self.group.set_payoffs() class Results(Page): def vars_for_template(self): total_payoff = sum([p.payoff for p in self.player.in_all_rounds()]) self.participant.vars['bret_payoff'] = total_payoff round_to_pay = random.randint(1, Constants.num_rounds) self.participant.vars['round_to_pay'] = round_to_pay return { 'player_in_all_rounds': self.player.in_all_rounds(), 'principal_wage_offer': self.group.principal_wage_offer, 'agent_work_effort': self.group.agent_work_effort, 'round_result': self.group.round_result, 'round_to_pay': self.participant.vars['round_to_pay'], 'payoff': self.player.payoff, 'total_payoff': total_payoff, } page_sequence = [ #Introduction1, #Introduction, Delegation, OfferWaitPage, Offer, Offer1, OfferWaitPage, WorkEffort, ResultsWaitPage, Results]