from __future__ import division from otree.db import models import otree.models import otree.constants from otree import widgets from otree.common import Currency as c, currency_range import random import itertools # from django_countries.fields import CountryField author = 'Max Wohlers' doc = """ Investment Decision """ class Constants(otree.constants.BaseConstants): name_in_url = 'investment_decision' players_per_group = 3 num_rounds = 1 endowment = c(60) efficiency_factor = 0.5 class Subsession(otree.models.BaseSubsession): def before_session_starts(self): treatments = itertools.cycle(['PoAn', 'NeAn', 'PoSw', 'NeSw', 'PoAB', 'NeAB']) for g in self.get_groups(): g.group_treatment = next(treatments) class Group(otree.models.BaseGroup): total_contribution = models.CurrencyField() individual_share = models.CurrencyField() group_treatment = models.CharField() def set_payoffs(self): self.total_contribution = sum([p.contribution for p in self.get_players()]) self.individual_share = self.total_contribution * Constants.efficiency_factor for p in self.get_players(): p.payoff = Constants.endowment - p.contribution + self.individual_share class Player(otree.models.BasePlayer): contribution = models.CurrencyField(min=0, max=Constants.endowment) keep = models.CurrencyField(min=0, max=Constants.endowment) contributionothers = models.CurrencyField(min=0, max=120) keepothers = models.CurrencyField(min=0, max=120) country = models.CharField(verbose_name='What is your country of citizenship?') age = models.PositiveIntegerField(verbose_name='What is your age?', choices=range(13, 125), initial=None) gender = models.CharField(initial=None, choices=['Male', 'Female'], verbose_name='What is your gender?', widget=widgets.RadioSelect()) education1 = models.CharField(initial=None, choices=['Economics', 'Psychology', 'Other'], verbose_name='What is your education?', widget=widgets.RadioSelect()) education2 = models.CharField(initial=None, choices=['Yes', 'No'], verbose_name='Do you have a background in Economics', widget=widgets.RadioSelect()) experience = models.CharField(initial=None, choices=['Yes', 'No'], verbose_name='Have you played other economic games before?', widget=widgets.RadioSelect()) comprehension1 = models.CharField() comprehension2 = models.CharField() ownname = models.CharField(verbose_name='Please state your full name:')