""" from otree.api import ( models, BaseConstants, BaseSubsession, BaseGroup, BasePlayer, Currency as c ) from datetime import datetime, timedelta class Constants(BaseConstants): name_in_url = 'Results_New' players_per_group = None num_rounds = 1 class Subsession(BaseSubsession): pass def creating_session(subsession): for p in subsession.get_players(): p.participant.vars.setdefault('payoff_time_date', 0) # 0=tomorrow, 1=4 weeks p.participant.vars.setdefault('payoff_risk', 3) p.participant.vars.setdefault('payoff_ambig', 2) p.participant.vars.setdefault('payoff_time', 4) class Group(BaseGroup): pass class Player(BasePlayer): sona_id = models.StringField(blank=True) orig_payment = models.CurrencyField() total_payment = models.CurrencyField() payment_today = models.CurrencyField() payment_tomorrow = models.CurrencyField() payment_4w = models.CurrencyField() delayed_pay_date = models.StringField(blank=True) paypal = models.StringField( label='Please enter either your email address or your phone number linked to your PayPal account in the box below.', blank=False, ) def set_payment_vars(self): pvars = self.participant.vars payoff_time_date = pvars.get('payoff_time_date', 0) payoff_risk = pvars.get('payoff_risk', 5) payoff_ambig = pvars.get('payoff_ambig', 0) payoff_time = pvars.get('payoff_time', 0) payoff_ambiguity = pvars.get('payoff_ambiguity', 0) self.sona_id = self.participant.label or '' if payoff_time_date == 0: self.payment_today = c(payoff_risk + payoff_ambig) self.payment_tomorrow = c(payoff_time) self.payment_4w = c(0) else: self.payment_today = c(payoff_risk + payoff_ambig) self.payment_tomorrow = c(0) self.payment_4w = c(payoff_time) self.orig_payment = self.payment_today + self.payment_tomorrow + self.payment_4w if self.orig_payment < c(10): self.total_payment = c(10) self.payment_today = c(10 - self.payment_tomorrow - self.payment_4w) else: self.total_payment = self.orig_payment self.payoff = self.payment_tomorrow + self.payment_4w + c(payoff_ambig) if payoff_time_date == 1: d = datetime.now() + timedelta(days=28) self.delayed_pay_date = d.strftime('%b-%d-%Y') else: d = datetime.now() + timedelta(days=1) self.delayed_pay_date = d.strftime('%b-%d-%Y') """ from otree.api import ( models, BaseConstants, BaseSubsession, BaseGroup, BasePlayer, Currency as c ) from datetime import datetime, timedelta class Constants(BaseConstants): name_in_url = 'Results_New' players_per_group = None num_rounds = 1 class Subsession(BaseSubsession): pass class Group(BaseGroup): pass class Player(BasePlayer): sona_id = models.StringField(blank=True) participation_fee = models.CurrencyField() total_payment = models.CurrencyField() payment_today = models.CurrencyField() payment_tomorrow = models.CurrencyField() payment_4w = models.CurrencyField() payment_8w = models.CurrencyField() delayed_pay_date_4w = models.StringField(blank=True) delayed_pay_date_8w = models.StringField(blank=True) paypal = models.StringField( label='Please enter either your email address or your phone number linked to your PayPal account in the box below.', blank=False, ) def set_payment_vars(self): pv = self.participant.vars # ---- basic settings ---- # put your actual participation fee here participation_fee = c(pv.get('participation_fee', 5)) bonus_eligible = pv.get('bonus_eligible', False) bonus_part = pv.get('bonus_part', None) payoff_risk = c(pv.get('payoff_risk', 0)) payoff_time = c(pv.get('payoff_time', 0)) payoff_ambig = c(pv.get('payoff_ambig', 0)) time_selected_task = pv.get('time_selected_task', None) # lot_4w / lot_8w / ce_4w / ce_8w time_selected_choice = pv.get('time_selected_choice', None) # early / late self.sona_id = self.participant.label or '' self.participation_fee = participation_fee # default bonus_today = c(0) bonus_tomorrow = c(0) bonus_4w = c(0) bonus_8w = c(0) selected_bonus_amount = c(0) selected_bonus_part_label = None if bonus_eligible: if bonus_part == 1: selected_bonus_amount = payoff_risk selected_bonus_part_label = 'Risk' bonus_today = payoff_risk elif bonus_part == 2: selected_bonus_amount = payoff_time selected_bonus_part_label = 'Time' if time_selected_choice == 'early': bonus_tomorrow = payoff_time elif time_selected_task in ('lot_4w', 'ce_4w'): bonus_4w = payoff_time elif time_selected_task in ('lot_8w', 'ce_8w'): bonus_8w = payoff_time elif bonus_part == 3: selected_bonus_amount = payoff_ambig selected_bonus_part_label = 'Ambiguity' bonus_today = payoff_ambig self.payment_today = participation_fee + bonus_today self.payment_tomorrow = bonus_tomorrow self.payment_4w = bonus_4w self.payment_8w = bonus_8w self.total_payment = ( self.payment_today + self.payment_tomorrow + self.payment_4w + self.payment_8w ) # optional: use total payment as oTree payoff summary self.payoff = self.total_payment # delayed payment dates d4 = datetime.now() + timedelta(days=28) d8 = datetime.now() + timedelta(days=56) self.delayed_pay_date_4w = d4.strftime('%b-%d-%Y') self.delayed_pay_date_8w = d8.strftime('%b-%d-%Y') # store useful summary vars pv['selected_bonus_amount'] = selected_bonus_amount pv['selected_bonus_part_label'] = selected_bonus_part_label