from otree.api import Currency as c, currency_range from ._builtin import Page, WaitPage from .models import Constants import pandas as pd # Introduction to Post Questions class IntroPostQ(Page): def before_next_page(self): if self.player.participant.vars['treatment'] in ['1A','1B']: advice_purchases = [i == 'Yes' for i in self.player.participant.vars['advice_purchases']] self.player.allt = True if all(advice_purchases) else False self.player.anyt = True if any(advice_purchases) and not all(advice_purchases) else False self.player.nonet = True if not any(advice_purchases) else False self.player.anybid = any(advice_purchases[-(self.session.vars['num_lastRounds']+1):]) elif self.player.participant.vars['treatment'] in ['2A','2B']: adv_purchases = self.player.participant.vars['advice_purchases'] print(adv_purchases) self.player.A = any([i == '0' for i in adv_purchases]) self.player.B = any([i == '12' for i in adv_purchases]) self.player.C = any([i == '1' or i=='2' for i in adv_purchases]) self.player.D = True if len(list(set(adv_purchases)))>1 else False print('A',self.player.A) print('B',self.player.B) print('C',self.player.C) print('D',self.player.D) self.player.anybid = any([i != '0' for i in adv_purchases[-(self.session.vars['num_lastRounds']+1):]]) # Questions on behavior - treatment 1A or 1B class PostQ_behavior_T1(Page): form_model = 'player' def get_form_fields(self): fields = ['Q6all','Q6bisall','Q6any_pos','Q6bisany_pos','Q6any_neg','Q6bisany_neg','Q6none','Q6bisnone','Q7'] vals = [self.player.allt,self.player.allt,self.player.anyt,self.player.anyt,self.player.anyt,self.player.anyt, self.player.nonet,self.player.nonet, self.player.anybid] form_fields = [j for i, j in zip(vals, fields) if i] + ['Q1','Q2','Q3','Q4','D8'] return form_fields def is_displayed(self): return self.player.participant.vars['treatment'] in ['1A','1B'] # Questions on behavior - treatment 2A or 2B class PostQ_behavior_T2(Page): form_model = 'player' def get_form_fields(self): fields = ['Q14A','Q14B','Q14C','Q14D','Q14bisA','Q14bisB','Q14bisC'] vals = [self.player.A, self.player.B,self.player.C,self.player.D,self.player.A, self.player.B,self.player.C] q14 = [j for i, j in zip(vals, fields) if i] form_fields = ['Q1','Q2','Q8','Q10','Q11','Q12','Q13'] + q14 + ['D11','D12','D13'] if self.player.participant.vars['treatment_2advisors_lastrounds'] == 'version1' and self.player.anybid == True: form_fields.append('Q15V1') elif self.player.participant.vars['treatment_2advisors_lastrounds'] == 'version2' and self.player.anybid == True: form_fields.append('Q15V2') return form_fields def is_displayed(self): return self.player.participant.vars['treatment'] in ['2A','2B'] def vars_for_template(self): return dict(behavior=self.player.get_behavior_string()) # Questions on demographics - treatment 1A or 1B class PostQ_demographics_T1(Page): form_model = 'player' form_fields = ['D1','D2','D3','D4','D41','D5','D7', #'D71','D72','D73','D74','D75', 'D9','D10','confirmed'] def is_displayed(self): return self.player.participant.vars['treatment'] in ['1A','1B'] and self.session.config['HasDemographics'] == True # Questions on demographics - treatment 2A or 2B class PostQ_demographics_T2(Page): form_model = 'player' form_fields = ['D1','D2','D3','D4','D41','D5','D7', #'D71','D72','D73','D74','D75', 'D8','D9','D10','confirmed'] def is_displayed(self): return self.player.participant.vars['treatment'] in ['2A','2B'] and self.session.config['HasDemographics'] == True # Final page with final payoff class payoff(Page): def vars_for_template(self): self.player.final_payoff = self.player.get_final_payoff() self.player.final_payoff_euro = self.player.get_final_payoff_euro() return { 'final_payoff': self.player.final_payoff, 'final_payoff_euro': self.player.final_payoff_euro, 'euroconversion':self.session.vars['euroconversion'], 'HasDemographics':self.session.config['HasDemographics']} page_sequence = [ IntroPostQ, PostQ_behavior_T1, PostQ_behavior_T2, PostQ_demographics_T1, PostQ_demographics_T2, payoff ]