import random from ._builtin import Page, WaitPage from .models import Constants class Instructions(Page): form_model = 'player' form_fields = ['email', 'birth_date', 'p_label'] def before_next_page(self): self.player.payoff += Constants.PointsImport_dict.get(self.player.email) self.player.online_points = Constants.PointsImport_dict.get(self.player.email) self.participant.label = self.player.p_label class WTP_Instructions(Page): pass class WTP_Instructions2(Page): form_model = 'player' form_fields = ['WTP_i1', 'WTP_i2', 'WTP_i3', 'WTP_i4', 'WTP_i5'] class Pres_Beef(Page): pass class Pres_Croc(Page): pass class AA(Page): form_model = 'player' form_fields = ['a1', 'a2', 'a3', 'a4', 'a5', 'a6', 'a7', 'a8'] def get_form_fields(self): fields = self.form_fields random.shuffle(fields) return fields class FA(Page): form_model = 'player' form_fields = ['f1','f2','f3','f4','f5','f6','f7','f8'] def get_form_fields(self): fields = self.form_fields random.shuffle(fields) return fields class EHA(Page): form_model = 'player' form_fields = ['e1','e2','e3','e4','h1','h2','h3','h4'] def get_form_fields(self): fields = self.form_fields random.shuffle(fields) return fields class K(Page): form_model = 'player' form_fields = ['k1','k2','k3','k4','k5','k6','k7','k8'] def get_form_fields(self): fields = self.form_fields random.shuffle(fields) return fields def before_next_page(self): if self.player.k1 == 1: self.player.payoff += 50 else: pass if self.player.k2 == 1: self.player.payoff += 50 else: pass if self.player.k3 == 1: self.player.payoff += 50 else: pass if self.player.k4 == 1: self.player.payoff += 50 else: pass if self.player.k5 == 1: self.player.payoff += 50 else: pass if self.player.k6 == 1: self.player.payoff += 50 else: pass if self.player.k7 == 1: self.player.payoff += 50 else: pass if self.player.k8 == 1: self.player.payoff += 50 else: pass class IBA(Page): def is_displayed(self): return self.player.infodraw_b == 1 and self.player.offer_b >= self.player.WTP_drawn_b class IBE(Page): def is_displayed(self): return self.player.infodraw_b == 2 and self.player.offer_b >= self.player.WTP_drawn_b class IBH(Page): def is_displayed(self): return self.player.infodraw_b == 3 and self.player.offer_b >= self.player.WTP_drawn_b class ICA(Page): def is_displayed(self): return self.player.infodraw_c == 1 and self.player.offer_c >= self.player.WTP_drawn_c class ICE(Page): def is_displayed(self): return self.player.infodraw_c == 2 and self.player.offer_c >= self.player.WTP_drawn_c class ICH(Page): def is_displayed(self): return self.player.infodraw_c == 3 and self.player.offer_c >= self.player.WTP_drawn_c class Info_refused_beef(Page): def is_displayed(self): return self.player.offer_b < self.player.WTP_drawn_b class Info_refused_croc(Page): def is_displayed(self): return self.player.offer_c < self.player.WTP_drawn_c class WTP_Beef(Page): form_model = 'player' form_fields = ['WTP_ba', 'WTP_be', 'WTP_bh',] def before_next_page(self): self.player.offer_b = random.uniform(-75, 75) self.player.infodraw_b = random.randint(1, 3) if self.player.infodraw_b == 1: self.player.WTP_drawn_b = self.player.WTP_ba self.player.info_draw_b_string = "animal treatment" elif self.player.infodraw_b == 2: self.player.WTP_drawn_b = self.player.WTP_be self.player.info_draw_b_string = "environmental impact" else: self.player.WTP_drawn_b = self.player.WTP_bh self.player.info_draw_b_string = "health" if self.player.offer_b >= self.player.WTP_drawn_b: self.player.payoff += self.player.offer_b self.player.aor_b = '''Because the offer was higher than your minimum acceptable payoff, the offer was accepted. You will receive the payoff and information about beef and ''' + self.player.info_draw_b_string else: self.player.aor_b = '''Because the offer was lower than your minimum acceptable payoff, the offer was refused. You will not receive the payoff or the information. You will however receive equally long information about another unrelated topic''' class WTP_Croc(Page): form_model = 'player' form_fields = ['WTP_ca', 'WTP_ce', 'WTP_ch'] def before_next_page(self): self.player.offer_c = random.uniform(-75, 75) self.player.infodraw_c = random.randint(1, 3) if self.player.infodraw_c == 1: self.player.WTP_drawn_c = self.player.WTP_ca self.player.info_draw_c_string = "animal treatment" elif self.player.infodraw_c == 2: self.player.WTP_drawn_c = self.player.WTP_ce self.player.info_draw_c_string = "environmental impact" else: self.player.WTP_drawn_c = self.player.WTP_ch self.player.info_draw_c_string = "health" if self.player.offer_c >= self.player.WTP_drawn_c: self.player.payoff += self.player.offer_c self.player.aor_c = '''Because the offer was higher than your minimum acceptable payoff, the offer was accepted. You will receive the payoff and information about crocodile and ''' + self.player.info_draw_c_string else: self.player.aor_c = '''Because the offer was lower than your minimum acceptable payoff, the offer was refused. You will not receive the payoff or the information. You will however receive equally long information about another unrelated topic''' class WTP_Results(Page): def before_next_page(self): self.player.money = round(self.player.payoff / 100 + self.session.config['participation_fee']) class Final_Payoff(Page): pass page_sequence = [Instructions, WTP_Instructions, WTP_Instructions2, Pres_Beef, Pres_Croc, AA, FA, EHA, K, WTP_Beef, WTP_Croc, WTP_Results, IBA, IBH, IBE, Info_refused_beef, ICA, ICE, ICH, Info_refused_croc, Final_Payoff]