from otree.api import * c = cu doc = '' class Constants(BaseConstants): name_in_url = 'Stage11' players_per_group = 3 num_rounds = 7 equal = (0.333, 0.333, 0.333) E = 20 W = 120 prod = (6, 3, 2) class Subsession(BaseSubsession): pass def S2calculation(group): group = group players = group.get_players() group.total_aporte = sum([p.aporte for p in players]) if group.total_aporte == 0 : group.water_available = 0 if group.total_aporte == 5 : group.water_available = 3 if group.total_aporte == 10 : group.water_available = 6 if group.total_aporte == 15 : group.water_available = 9 if group.total_aporte == 20 : group.water_available = 12 if group.total_aporte == 25 : group.water_available = 36 if group.total_aporte == 30 : group.water_available = 42 if group.total_aporte == 35 : group.water_available = 45 if group.total_aporte == 40 : group.water_available = 51 if group.total_aporte == 45 : group.water_available = 105 if group.total_aporte == 50 : group.water_available = 108 if group.total_aporte == 55 : group.water_available = 114 if group.total_aporte == 60 : group.water_available = 120 for p in players : if group.round_number != 1 : p.acumulated = p.participant.vars["local"] for p in players : p.acumulated_global = p.participant.vars["global1"] p.water_share = round(group.water_available*Constants.prod[p.type-1]*Constants.equal[p.type-1]) p.left = Constants.E-p.aporte p.benefits = round(p.left+p.water_share) p.acumulated = round(p.acumulated + p.benefits) p.acumulated_global = round(p.acumulated_global + p.benefits) p.participant.vars["global1"] = round(p.acumulated_global) p.participant.vars["local"] = round(p.acumulated) p.participant.etapa1 = p.participant.vars["global1"] if p.type == 1 : group.high = round(p.benefits) elif p.type == 2 : group.med = round(p.benefits) elif p.type == 3 : group.low = round(p.benefits) def S2(group): group = group players = group.get_players() for p in players : p.type = p.participant.vars["type"] p.type2 = p.participant.vars["type2"] p.participant.etapa1 = 0 class Group(BaseGroup): total_aporte = models.IntegerField() water_available = models.FloatField() high = models.FloatField() med = models.FloatField() low = models.FloatField() S2calculation = S2calculation S2 = S2 class Player(BasePlayer): aporte = models.IntegerField(choices=[[0, '0'], [5, '5'], [10, '10'], [15, '15'], [20, '20']], initial=0, max=Constants.E, min=0) type = models.IntegerField() type2 = models.StringField() left = models.IntegerField() benefits = models.FloatField() acumulated = models.FloatField(initial=0) water_share = models.FloatField() acumulated_global = models.FloatField() class Stage1(WaitPage): after_all_players_arrive = S2 class Stage1intro(Page): form_model = 'player' form_fields = ['aporte'] class Stage1calculation(WaitPage): after_all_players_arrive = S2calculation class Stage1results(Page): form_model = 'player' page_sequence = [Stage1, Stage1intro, Stage1calculation, Stage1results]