from otree.api import Currency as c, currency_range from ._builtin import Page, WaitPage from . import models from .models import Constants, Player from otree.common import safe_json from otree.views.abstract import get_view_from_url from otree.api import widgets import random from django.http import HttpResponseRedirect, Http404, HttpResponse from django.template.response import TemplateResponse from django.core.urlresolvers import reverse from otree.models_concrete import ( PageCompletion, CompletedSubsessionWaitPage, CompletedGroupWaitPage, PageTimeout, UndefinedFormModel, ParticipantLockModel, GlobalLockModel, ParticipantToPlayerLookup ) import time class BeginGames(Page): pass # group_by_arrival_time = True class Introduction(Page): pass # def is_displayed(self): # return self.round_number == 1 class CustomWaitPage(WaitPage): template_name = 'games/CustomWaitPage.html' class WaitForPlayers(WaitPage): group_by_arrival_time = True class Offer(Page): form_model = models.Group form_fields = ['receiver_offered'] def is_displayed(self): return self.player.role() == "Receiver" # timeout_seconds = 60 class ResultsWaitPage(CustomWaitPage): def after_all_players_arrive(self): self.group.set_payoffs() class Results(Page): def vars_for_template(self): total_offered = self.group.stimulated_average * Constants.stimulated_players + self.group.receiver_offered average_offered = total_offered / Constants.G1players return { 'total_offered': total_offered, 'average_offered': average_offered } timeout_seconds = 20 class Stimulated(Page): def is_displayed(self): return self.player.role() == 'Receiver' # timeout_seconds = 15 def vars_for_template(self): return {'range': range(Constants.stimulated_players), 'amount_offered': self.group.amount_offered} class StimulationWait(Page): template_name = 'games/WaitForStimulation.html' timeout_seconds = 2 def is_displayed(self): return self.player.role() == "Receiver" class WaitForStimulation2(Page): timeout_seconds = 2 def is_displayed(self): return self.player.role() == "Receiver" class WaitForStimulation3(Page): timeout_seconds = 3 def is_displayed(self): return self.player.role() == "Receiver" class WaitForStimulation4(Page): timeout_seconds = 4 def is_displayed(self): return self.player.role() == "Receiver" class WaitForStimulation5(Page): timeout_seconds = 1 def is_displayed(self): return self.player.role() == "Receiver" class SenderWait1(Page): timeout_seconds = 2 def is_displayed(self): return self.player.role() == "Sender" class SenderWait2(Page): timeout_seconds = 2 def is_displayed(self): return self.player.role() == "Sender" class SenderWait3(Page): timeout_seconds = 3 def is_displayed(self): return self.player.role() == "Sender" class SenderWait4(Page): timeout_seconds = 4 def is_displayed(self): return self.player.role() == "Sender" class SenderWait5(Page): timeout_seconds = 2 def is_displayed(self): return self.player.role() == "Sender" class Fairness(Page): form_model = models.Group form_fields = ['receiver_fairness','group_fairness'] def is_displayed(self): return self.player.role() == 'Receiver' def vars_for_template(self): return { 'fairness_scales': range(1,6), 'group_scales': range(1,6) } # for the trust game class TGInstructions(Page): pass class TG_WaitForSender(CustomWaitPage): def is_displayed(self): return self.player.role() == 'Receiver' class TG_Send(Page): form_model = models.Group form_fields = ['sent_amount'] def is_displayed(self): return self.player.role() == 'Sender' class TG_SendBack(Page): form_model = models.Group form_fields = ['sent_back_amount'] def is_displayed(self): return self.player.role() == 'Receiver' def vars_for_template(self): tripled_amount = self.group.sent_amount * Constants.multiplication_factor return { 'tripled_amount': tripled_amount, 'prompt': 'Please choose an amount from 0 to %s:' % tripled_amount} def sent_back_amount_max(self): tripled_amount = self.group.sent_amount * Constants.multiplication_factor return tripled_amount class TGResultsWaitPage(WaitPage): def after_all_players_arrive(self): self.group.tg_payoffs() class TGResults(Page): """This page displays the earnings of each player""" # form_model = models.Group # form_fields = ['meet_expectation'] def vars_for_template(self): return { 'tripled_amount': self.group.sent_amount * Constants.multiplication_factor, 'expectation': ['yes','no'] } class Receiver_Expectation(Page): form_model = models.Group form_fields = ['receiver_expectation'] def is_displayed(self): return self.player.role() == 'Receiver' class Sender_Expectation(Page): form_model = models.Group form_fields = ['sender_expectation'] def vars_for_template(self): tripled_amount = self.group.sent_amount * Constants.multiplication_factor return {'tripled_amount': tripled_amount} def sender_expectation_max(self): tripled_amount = self.group.sent_amount * Constants.multiplication_factor return tripled_amount def is_displayed(self): return self.player.role() == 'Sender' class FinalPayoff(Page): def vars_for_template(self): return{'total_payoffs': self.group.total_payoffs()} page_sequence = [ BeginGames, Introduction, StimulationWait, WaitForStimulation2, WaitForStimulation3, WaitForStimulation4, WaitForStimulation5, Stimulated, Offer, SenderWait1, SenderWait2, SenderWait3, SenderWait4, SenderWait5, ResultsWaitPage, Fairness, Results, TGInstructions, TG_Send, Receiver_Expectation, WaitPage, Sender_Expectation, TG_SendBack, TGResultsWaitPage, TGResults, FinalPayoff ]