from . import models from ._builtin import Page, WaitPage from otree.api import Currency as c, currency_range from .forms import PFormset from .models import Constants, Player, Punishment as PunishmentModel class Questions(Page): form_model = 'player' form_fields = ['gender', 'breakfast_this_morning', 'breakfast_usually', 'how_hungry'] def is_displayed(self): return self.subsession.round_number == 1 class Intro(Page): template_name = 'pggfg/Introduction.html' def is_displayed(self): return self.subsession.round_number == 1 class PracticeQuestions(Page): form_model = 'player' form_fields = ['Q1','Q2','Q3'] def is_displayed(self): return self.subsession.round_number == 1 class PracticeAnswers(Page): def is_displayed(self): return self.subsession.round_number == 1 class PracticePunishmentQuestions(Page): form_model = 'player' form_fields = ['Q4','Q5'] def is_displayed(self): return self.subsession.round_number == 1 class PracticePunishmentAnswers(Page): def is_displayed(self): return self.subsession.round_number == 1 class PracticeWaitPage(WaitPage): pass class Contribute(Page): form_model = 'player' form_fields = ['contribution'] class AfterContribWP(WaitPage): def after_all_players_arrive(self): self.group.set_pd_payoffs() for p in self.group.get_players(): p.set_punishment_endowment() class PrePunishTotal(Page): ... class PrePunishTotalWP(WaitPage): ... class Punishment(Page): def vars_for_template(self): return {'formset': PFormset(instance=self.player)} def post(self): context = super().get_context_data() formset = PFormset(self.request.POST, instance=self.player) context['formset'] = formset if formset.is_valid(): allpuns = formset.save(commit=True) else: return self.render_to_response(context) return super().post() class AfterPunishmentWP(WaitPage): def after_all_players_arrive(self): self.group.set_punishments() for p in self.group.get_players(): p.set_payoff() class Results(Page): ... # from customwp.views import StartWP page_sequence = [ Questions, Intro, PracticeQuestions, PracticeAnswers, PracticePunishmentQuestions, PracticePunishmentAnswers, PracticeWaitPage, Contribute, AfterContribWP, PrePunishTotal, PrePunishTotalWP, Punishment, AfterPunishmentWP, Results, ]