from otree.api import Currency as c, currency_range from ._builtin import Page, WaitPage from .models import Constants import random # ---------------------------------------------------------------------------------------------------------------------- # ---------------------------------------------------------------------------------------------------------------------- # ---------------------------------------------------------------------------------------------------------------------- class P2HistoryScreenL(Page): # timeout_seconds = 60 timer_text = 'Verbleibende Zeit:' def is_displayed(self): return self.participant.vars['subtreatment'] == 'L' and (self.round_number == 4 or self.round_number == 7 or self.round_number == 10) def vars_for_template(self): return {'round_number': self.round_number, 'periodic_payout_lottery4': self.player.in_round(1).periodic_payout_lottery, 'periodic_payout_lottery7': self.player.in_round(4).periodic_payout_lottery, 'periodic_payout_lottery10': self.player.in_round(7).periodic_payout_lottery, 'subtreatment': self.participant.vars['subtreatment'], 'lottery_outcomeL1': self.player.in_round(1).lottery_outcomeL1, 'lottery_outcomeL2': self.player.in_round(1).lottery_outcomeL2, 'lottery_outcomeL3': self.player.in_round(1).lottery_outcomeL3, 'lottery_outcomeL4': self.player.in_round(1).lottery_outcomeL4, 'lottery_outcomeL5': self.player.in_round(1).lottery_outcomeL5, 'lottery_outcomeL6': self.player.in_round(1).lottery_outcomeL6, 'lottery_outcomeL7': self.player.in_round(1).lottery_outcomeL7, 'lottery_outcomeL8': self.player.in_round(1).lottery_outcomeL8, 'lottery_outcomeL9': self.player.in_round(1).lottery_outcomeL9 } # ---------------------------------------------------------------------------------------------------------------------- class P2HistoryScreenH(Page): # timeout_seconds = 60 timer_text = 'Verbleibende Zeit:' def is_displayed(self): return self.participant.vars['subtreatment'] == 'H' and (self.round_number == 2 or self.round_number == 3 or self.round_number == 4 or self.round_number == 5 or self.round_number == 6 or self.round_number == 7 or self.round_number == 8 or self.round_number == 9 or self.round_number == 10) def vars_for_template(self): return {'round_number': self.round_number, 'periodic_payout_lottery1': self.player.in_round(1).periodic_payout_lottery, 'periodic_payout_lottery2': self.player.in_round(2).periodic_payout_lottery, 'periodic_payout_lottery3': self.player.in_round(3).periodic_payout_lottery, 'periodic_payout_lottery4': self.player.in_round(4).periodic_payout_lottery, 'periodic_payout_lottery5': self.player.in_round(5).periodic_payout_lottery, 'periodic_payout_lottery6': self.player.in_round(6).periodic_payout_lottery, 'periodic_payout_lottery7': self.player.in_round(7).periodic_payout_lottery, 'periodic_payout_lottery8': self.player.in_round(8).periodic_payout_lottery, 'periodic_payout_lottery9': self.player.in_round(9).periodic_payout_lottery, 'subtreatment': self.participant.vars['subtreatment'], 'lottery_outcomeH1': self.player.in_round(1).lottery_outcomeH, 'lottery_outcomeH2': self.player.in_round(2).lottery_outcomeH, 'lottery_outcomeH3': self.player.in_round(3).lottery_outcomeH, 'lottery_outcomeH4': self.player.in_round(4).lottery_outcomeH, 'lottery_outcomeH5': self.player.in_round(5).lottery_outcomeH, 'lottery_outcomeH6': self.player.in_round(6).lottery_outcomeH, 'lottery_outcomeH7': self.player.in_round(7).lottery_outcomeH, 'lottery_outcomeH8': self.player.in_round(8).lottery_outcomeH, 'lottery_outcomeH9': self.player.in_round(9).lottery_outcomeH } # ---------------------------------------------------------------------------------------------------------------------- class P3Elicitation2H_Lottery(Page): form_model = 'player' form_fields = ['amount_invested'] def is_displayed(self): return self.participant.vars['subtreatment'] == 'H' and (self.round_number == 1 or self.round_number == 2 or self.round_number == 3 or self.round_number == 4 or self.round_number == 5 or self.round_number == 6 or self.round_number == 7 or self.round_number == 8 or self.round_number == 9) def before_next_page(self): self.player.random_draw_lottery() print('random_draw_lottery', self.player.draw_lottery) if self.round_number == 9: self.player.payoffSecondDate = sum([p.periodic_payout_lottery for p in self.player.in_all_rounds()]) self.player.payoff_help = self.player.payoffSecondDate / 400 self.player.payoff = round((self.player.payoff_help * 2) + 0.0001) / 2 self.player.control_payoff() def vars_for_template(self): return {'round_number': self.round_number } # ---------------------------------------------------------------------------------------------------------------------- class P3Elicitation2L_Lottery(Page): form_model = 'player' form_fields = ['amount_invested'] def is_displayed(self): return self.participant.vars['subtreatment'] == 'L' and (self.round_number == 1 or self.round_number == 4 or self.round_number == 7) def before_next_page(self): if self.round_number == 1 and self.participant.vars['subtreatment'] == 'L': draw_lotteries = ['x', 'x', 'y'] self.player.draw_lottery1 = random.choice(draw_lotteries) self.player.draw_lottery2 = random.choice(draw_lotteries) self.player.draw_lottery3 = random.choice(draw_lotteries) self.player.draw_lottery4 = random.choice(draw_lotteries) self.player.draw_lottery5 = random.choice(draw_lotteries) self.player.draw_lottery6 = random.choice(draw_lotteries) self.player.draw_lottery7 = random.choice(draw_lotteries) self.player.draw_lottery8 = random.choice(draw_lotteries) self.player.draw_lottery9 = random.choice(draw_lotteries) print('random_draw_lottery1', self.player.draw_lottery1) print('random_draw_lottery2', self.player.draw_lottery2) print('random_draw_lottery3', self.player.draw_lottery3) print('random_draw_lottery4', self.player.draw_lottery4) print('random_draw_lottery5', self.player.draw_lottery5) print('random_draw_lottery6', self.player.draw_lottery6) print('random_draw_lottery7', self.player.draw_lottery7) print('random_draw_lottery8', self.player.draw_lottery8) print('random_draw_lottery9', self.player.draw_lottery9) if self.player.draw_lottery1 == 'x': self.player.lottery_realization1 = 0 elif self.player.draw_lottery1 == 'y': self.player.lottery_realization1 = 2.5 if self.player.draw_lottery2 == 'x': self.player.lottery_realization2 = 0 elif self.player.draw_lottery2 == 'y': self.player.lottery_realization2 = 2.5 if self.player.draw_lottery3 == 'x': self.player.lottery_realization3 = 0 elif self.player.draw_lottery3 == 'y': self.player.lottery_realization3 = 2.5 if self.player.draw_lottery4 == 'x': self.player.lottery_realization4 = 0 elif self.player.draw_lottery4 == 'y': self.player.lottery_realization4 = 2.5 if self.player.draw_lottery5 == 'x': self.player.lottery_realization5 = 0 elif self.player.draw_lottery5 == 'y': self.player.lottery_realization5 = 2.5 if self.player.draw_lottery6 == 'x': self.player.lottery_realization6 = 0 elif self.player.draw_lottery6 == 'y': self.player.lottery_realization6 = 2.5 if self.player.draw_lottery7 == 'x': self.player.lottery_realization7 = 0 elif self.player.draw_lottery7 == 'y': self.player.lottery_realization7 = 2.5 if self.player.draw_lottery8 == 'x': self.player.lottery_realization8 = 0 elif self.player.draw_lottery8 == 'y': self.player.lottery_realization8 = 2.5 if self.player.draw_lottery9 == 'x': self.player.lottery_realization9 = 0 elif self.player.draw_lottery9 == 'y': self.player.lottery_realization9 = 2.5 self.player.sum_lottery_realization123 = \ self.player.lottery_realization1 + self.player.lottery_realization2 + self.player.lottery_realization3 self.player.sum_lottery_realization456 = \ self.player.lottery_realization4 + self.player.lottery_realization5 + self.player.lottery_realization6 self.player.sum_lottery_realization789 = \ self.player.lottery_realization7 + self.player.lottery_realization8 + self.player.lottery_realization9 if self.player.draw_lottery1 == 'x': self.player.lottery_outcomeL1 = 'Verloren' elif self.player.draw_lottery1 == 'y': self.player.lottery_outcomeL1 = 'Gewonnen' if self.player.draw_lottery2 == 'x': self.player.lottery_outcomeL2 = 'Verloren' elif self.player.draw_lottery2 == 'y': self.player.lottery_outcomeL2 = 'Gewonnen' if self.player.draw_lottery3 == 'x': self.player.lottery_outcomeL3 = 'Verloren' elif self.player.draw_lottery3 == 'y': self.player.lottery_outcomeL3 = 'Gewonnen' if self.player.draw_lottery4 == 'x': self.player.lottery_outcomeL4 = 'Verloren' elif self.player.draw_lottery4 == 'y': self.player.lottery_outcomeL4 = 'Gewonnen' if self.player.draw_lottery5 == 'x': self.player.lottery_outcomeL5 = 'Verloren' elif self.player.draw_lottery5 == 'y': self.player.lottery_outcomeL5 = 'Gewonnen' if self.player.draw_lottery6 == 'x': self.player.lottery_outcomeL6 = 'Verloren' elif self.player.draw_lottery6 == 'y': self.player.lottery_outcomeL6 = 'Gewonnen' if self.player.draw_lottery7 == 'x': self.player.lottery_outcomeL7 = 'Verloren' elif self.player.draw_lottery7 == 'y': self.player.lottery_outcomeL7 = 'Gewonnen' if self.player.draw_lottery8 == 'x': self.player.lottery_outcomeL8 = 'Verloren' elif self.player.draw_lottery8 == 'y': self.player.lottery_outcomeL8 = 'Gewonnen' if self.player.draw_lottery9 == 'x': self.player.lottery_outcomeL9 = 'Verloren' elif self.player.draw_lottery9 == 'y': self.player.lottery_outcomeL9 = 'Gewonnen' self.player.random_draw_lottery() self.player.calculate_payoff() def vars_for_template(self): return {'round_number': self.round_number } # ---------------------------------------------------------------------------------------------------------------------- class P4InstructionsPart4(Page): def is_displayed(self): return self.round_number == 10 # ---------------------------------------------------------------------------------------------------------------------- class P5RiskPerception(Page): form_model = 'player' form_fields = ['perception_risk', 'perception_loss', 'worry_loss', 'great_loss', 'understanding_risk', 'understanding_risk2', 'understanding_risk3', 'understanding_risk4', 'understanding_risk5', 'understanding_risk6', 'perceived_prob_loss', 'perceived_prob_win', 'satisfaction_risk'] def is_displayed(self): return self.round_number == 10 def vars_for_template(self): return {'round_number': self.round_number } # ---------------------------------------------------------------------------------------------------------------------- class P5RiskTask(Page): form_model = 'player' form_fields = ['risk_general', 'risk_finance'] def is_displayed(self): return self.round_number == 10 def vars_for_template(self): return {'round_number': self.round_number } # ---------------------------------------------------------------------------------------------------------------------- class P6Demographics(Page): form_model = 'player' form_fields = ['age', 'gender', 'education', 'study', 'investment'] def is_displayed(self): return self.round_number == 10 def before_next_page(self): self.player.calculate_payoff() # ---------------------------------------------------------------------------------------------------------------------- class P7Comments(Page): form_model = 'player' form_fields = ['comments'] def is_displayed(self): return self.round_number == 10 # ---------------------------------------------------------------------------------------------------------------------- class P8PayoutInfo(Page): form_model = 'player' form_fields = ['email', 'email2'] def is_displayed(self): return self.round_number == 10 def vars_for_template(self): return {'payoffH': self.player.in_round(9).payoff, 'payoffL': self.player.in_round(7).payoff, 'payoffSecondDate': self.player.payoffSecondDate, 'subtreatment': self.participant.vars['subtreatment'] } # ---------------------------------------------------------------------------------------------------------------------- class P9End(Page): def is_displayed(self): return self.round_number == 10 # ---------------------------------------------------------------------------------------------------------------------- page_sequence = [ P2HistoryScreenH, P2HistoryScreenL, P3Elicitation2H_Lottery, P3Elicitation2L_Lottery, P4InstructionsPart4, P5RiskPerception, P5RiskTask, P6Demographics, P7Comments, P8PayoutInfo, P9End, ]