from otree.api import Currency as c, currency_range from ._builtin import Page, WaitPage from .models import Constants, cost_for_workload class Page(Page): doc = """Page is a base template for all templates in the app. Here we give the template the round number of which we are currently in.""" def vars_for_template(self): period_max = Constants.num_rounds return { 'periodSub': self.subsession.round_number, 'periodMax': period_max } class ResultsWaitPage(WaitPage): def vars_for_template(self): title_text = "Bitte warten Sie, bis das Experiment weitergeht." if self.player.role() == 'worker': body_text = "Sie sind der Arbeitnehmers. Warte Sie auf das Angebot des Arbeitgebers." else: body_text = "Warten auf den Arbeitnehmer." return {'title_text': title_text, 'body_text': body_text} def after_all_players_arrive(self): self.group.set_payoffs() class Offer(Page): doc = """Page which is only displayed to leader. Here the leader makes an offer.""" form_model = 'group' form_fields = ['offer_amount'] def is_displayed(self): return self.player.role() == 'leader' class OfferWaitPage(WaitPage): def vars_for_template(self): title_text = "Sie sind in der Rolle des Arbeitsnehmers." body_text = "Bitte warten Sie bis das Experiment weiter geht." return {'title_text': title_text, 'body_text': body_text} class Accept(Page): doc = """Accept page for worker. Here he accepts and chooses a workload, or rejects the offer.""" def is_displayed(self): return self.player.role() == 'worker' form_model = 'group' form_fields = ['offer_accepted', 'worker_workload'] # Dies bietet einen einfachen Countdown. Jedoch hat dieser zwingend submissions. Siehe Page.hmtl für timer. # timeout_seconds = 60 # timeout_submission = { # 'offer_accepted': False, # 'worker_workload': 1, # } def error_message(self, values): print('@@@ ', values) if values['offer_accepted'] is True: print('offer TRUE') else: print('offer FALSE') values['worker_workload'] = None if values['offer_accepted'] and values['worker_workload'] is None: return 'Wenn Sie das Angebot angenommen haben, müssen Sie eine Arbeitsleistung abgeben.' def worker_workload_error_message(self, value): print('@@@@@@error message ', value) print(self.group.offer_accepted) if self.group.offer_accepted is True: # value['worker_workload'] = '0' print('@@@@ in if ') return class Stop(Page): pass class Results(Page): doc = """Shows results. Note: Results overrides Page.""" def vars_for_template(self): return { 'periodSub': self.subsession.round_number, 'received': self.player.payoff, 'workload_cost': cost_for_workload(self.group.worker_workload) } # leader: Offer, ResultsWaitPage, Results # worker: OfferWaitPage, Accept, ResultsWaitPage, Results page_sequence = [ Offer, OfferWaitPage, Accept, ResultsWaitPage, Results ]