from otree.api import Currency as c, currency_range from ._builtin import Page, WaitPage from .models import Constants class P01_Welcome(Page): def is_displayed(self): return self.round_number == 1 class P02_Intro(Page): def before_next_page(self): self.group.set_roles() self.player.table_sequence() def is_displayed(self): return self.round_number == 1 class P03_T1_Inst1(Page): def is_displayed(self): return self.round_number == 1 class P04_T1_Inst2(Page): def is_displayed(self): return self.round_number == 1 class P05_T1_Inst3(Page): def is_displayed(self): return self.round_number == 1 class P06_T1_Inst4(Page): def is_displayed(self): return self.round_number == 1 class P07_T1_Control1(Page): form_model = 'player' form_fields = ["control1", "control2", "control3", "control4"] def is_displayed(self): return self.round_number == 1 class P08_T1_Control2(Page): form_model = 'player' form_fields = ["control5", "control6", "control7"] def is_displayed(self): return self.round_number == 1 class P09_T1_Role(Page): def is_displayed(self): return self.round_number == 1 class P10_T1_Seller(Page): form_model = 'player' form_fields = ["T1_product", "T1_price"] def is_displayed(self): return self.player.type == 'seller' and self.round_number == 1 class P10_T1_BuyerFrame(Page): form_model = 'player' form_fields = ["T1_p02x", "T1_p04x", "T1_p08x", "T1_p12x", "T1_p16x", "T1_p20x", "T1_p24x", "T1_p28x", "T1_p32x", "T1_p36x", "T1_p40x", "T1_p44x", "T1_p48x", "T1_p50x", "T1_p02y", "T1_p04y", "T1_p08y", "T1_p12y", "T1_p16y", "T1_p20y", "T1_p24y", "T1_p28y", "T1_p32y", "T1_p36y", "T1_p40y", "T1_p44y", "T1_p48y", "T1_p50y"] def before_next_page(self): self.player.set_WTP() def is_displayed(self): return self.player.type == 'buyer' and self.round_number == 1 class P10x_T1_Buyer(Page): form_model = 'player' form_fields = ["T1_p02x", "T1_p04x", "T1_p08x", "T1_p12x", "T1_p16x", "T1_p20x", "T1_p24x", "T1_p28x", "T1_p32x", "T1_p36x", "T1_p40x", "T1_p44x", "T1_p48x", "T1_p50x"] def is_displayed(self): return (self.player.type == 'buyer' and self.player.field_maybe_none('t_order') == 1) and self.round_number == 1 class P10y_T1_Buyer(Page): form_model = 'player' form_fields = ["T1_p02y", "T1_p04y", "T1_p08y", "T1_p12y", "T1_p16y", "T1_p20y", "T1_p24y", "T1_p28y", "T1_p32y", "T1_p36y", "T1_p40y", "T1_p44y", "T1_p48y", "T1_p50y"] def before_next_page(self): if self.player.t_order == 1: self.player.set_WTP() def is_displayed(self): return self.player.type == 'buyer' and self.round_number == 1 class P10zx_T1_Buyer(Page): form_model = 'player' form_fields = ["T1_p02x", "T1_p04x", "T1_p08x", "T1_p12x", "T1_p16x", "T1_p20x", "T1_p24x", "T1_p28x", "T1_p32x", "T1_p36x", "T1_p40x", "T1_p44x", "T1_p48x", "T1_p50x"] def before_next_page(self): self.player.set_WTP() def is_displayed(self): return self.player.type == 'buyer' and self.player.field_maybe_none('t_order') == 2 and self.round_number == 1 class W02_T1_PayoffWait(WaitPage): def after_all_players_arrive(self): self.group.T1_payoff_calc() def is_displayed(self): return self.round_number == 1 class P11_T2_Intro(Page): def is_displayed(self): return self.round_number == 1 class P12_T2_Inst1(Page): def is_displayed(self): return self.round_number == 1 class P13_T2_Inst2(Page): def is_displayed(self): return self.round_number == 1 class P14_T2_Inst3(Page): def is_displayed(self): return self.round_number == 1 class P15_T2_Inst4(Page): def is_displayed(self): return self.round_number == 1 class P16_T2_Control(Page): form_model = 'player' form_fields = ["control1_T2", "control2_T2", "control4_T2"] def is_displayed(self): return self.round_number == 1 class P17_T2_Role(Page): def is_displayed(self): return self.round_number == 1 class W03_T2_ShuffleWait(WaitPage): wait_for_all_groups = True def after_all_players_arrive(self): self.subsession.group_randomly(fixed_id_in_group=True) def is_displayed(self): return self.round_number >= 2 class W04_T2_GroupWait(WaitPage): def after_all_players_arrive(self): self.group.set_offer_order() self.group.product_offered() class P18ax_T2_SellerOffer(Page): form_model = 'player' form_fields = ["seller_price_X"] def vars_for_template(self): seller1_product = self.group.get_player_by_id(1).T2_product seller2_product = self.group.get_player_by_id(2).T2_product period = self.round_number return dict( seller1_product=seller1_product, seller2_product=seller2_product, period=period ) def is_displayed(self): return self.player.type == 'seller' and self.player.T2_product == 'X' class P18ay_T2_SellerOffer(Page): form_model = 'player' form_fields = ["seller_price_Y"] def vars_for_template(self): seller1_product = self.group.get_player_by_id(1).T2_product seller2_product = self.group.get_player_by_id(2).T2_product period = self.round_number return dict( seller1_product=seller1_product, seller2_product=seller2_product, period=period ) def is_displayed(self): return self.player.type == 'seller' and self.player.T2_product == 'Y' class W05_T2_MarketWait(WaitPage): pass class P18b_T2_Seller1Info(Page): def vars_for_template(self): seller1_product = self.group.get_player_by_id(1).T2_product seller2_product = self.group.get_player_by_id(2).T2_product price_1X = self.group.get_player_by_id(1).field_maybe_none('seller_price_X') price_1Y = self.group.get_player_by_id(1).field_maybe_none('seller_price_Y') price_2X = self.group.get_player_by_id(2).field_maybe_none('seller_price_X') price_2Y = self.group.get_player_by_id(2).field_maybe_none('seller_price_Y') period = self.round_number return dict( seller1_product=seller1_product, seller2_product=seller2_product, price_1X=price_1X, price_1Y=price_1Y, price_2X=price_2X, price_2Y=price_2Y, period=period ) def is_displayed(self): return self.player.id_in_group == 1 class P18b_T2_Seller2Info(Page): def vars_for_template(self): seller1_product = self.group.get_player_by_id(1).T2_product seller2_product = self.group.get_player_by_id(2).T2_product price_1X = self.group.get_player_by_id(1).field_maybe_none('seller_price_X') price_1Y = self.group.get_player_by_id(1).field_maybe_none('seller_price_Y') price_2X = self.group.get_player_by_id(2).field_maybe_none('seller_price_X') price_2Y = self.group.get_player_by_id(2).field_maybe_none('seller_price_Y') period = self.round_number return dict( seller1_product=seller1_product, seller2_product=seller2_product, price_1X=price_1X, price_1Y=price_1Y, price_2X=price_2X, price_2Y=price_2Y, period=period ) def is_displayed(self): return self.player.id_in_group == 2 class P18_T2_Buyer(Page): form_model = 'player' form_fields = ["buyer_choice"] def vars_for_template(self): offer_order = self.group.offer_order seller1_product = self.group.get_player_by_id(1).T2_product seller2_product = self.group.get_player_by_id(2).T2_product price_1X = self.group.get_player_by_id(1).field_maybe_none('seller_price_X') price_1Y = self.group.get_player_by_id(1).field_maybe_none('seller_price_Y') price_2X = self.group.get_player_by_id(2).field_maybe_none('seller_price_X') price_2Y = self.group.get_player_by_id(2).field_maybe_none('seller_price_Y') period = self.round_number return dict( offer_order=offer_order, seller1_product=seller1_product, seller2_product=seller2_product, price_1X=price_1X, price_1Y=price_1Y, price_2X=price_2X, price_2Y=price_2Y, period=period ) def is_displayed(self): return self.player.type == "buyer" class W06_T2_PayoffWait(WaitPage): def after_all_players_arrive(self): self.group.T2_payoff_calc() class P19_T2_Feedback(Page): def vars_for_template(self): offer_order = self.group.offer_order buyer_choice = self.group.get_player_by_id(3).buyer_choice seller1 = self.group.get_player_by_id(1).T2_payoff seller2 = self.group.get_player_by_id(2).T2_payoff buyer = self.group.get_player_by_id(3).T2_payoff TC = self.group.get_player_by_id(4).T2_payoff seller1_product = self.group.get_player_by_id(1).T2_product seller2_product = self.group.get_player_by_id(2).T2_product price_1X = self.group.get_player_by_id(1).field_maybe_none('seller_price_X') price_1Y = self.group.get_player_by_id(1).field_maybe_none('seller_price_Y') price_2X = self.group.get_player_by_id(2).field_maybe_none('seller_price_X') price_2Y = self.group.get_player_by_id(2).field_maybe_none('seller_price_Y') period = self.round_number return dict( offer_order=offer_order, buyer_choice=buyer_choice, seller1=seller1, seller2=seller2, buyer=buyer, TC=TC, seller1_product=seller1_product, seller2_product=seller2_product, price_1X=price_1X, price_1Y=price_1Y, price_2X=price_2X, price_2Y=price_2Y, period=period ) class Z24a_FeedbackWait(WaitPage): pass class P20_T3_Intro(Page): def is_displayed(self): return self.round_number == Constants.num_rounds class P21_T3_Q1(Page): form_model = 'player' form_fields = ['age', 'sex', 'experience', 'studies'] def is_displayed(self): return self.round_number == Constants.num_rounds class P22_T3_Q2(Page): form_model = 'player' form_fields = ['markets1', 'markets2', 'markets3', 'markets4', 'markets5', 'markets6'] def is_displayed(self): return self.round_number == Constants.num_rounds class P23b_T3_Q3(Page): form_model = 'player' form_fields = ['verstanden', 'quality_check', 'not_harming_member', 'ownpayoff', 'utilitarian', 'belief_buyer_sellers1', 'belief_buyer_sellers2'] def is_displayed(self): return self.round_number == Constants.num_rounds and self.player.type == 'buyer' class P23c_T3_Q3(Page): form_model = 'player' form_fields = ['verstanden', 'quality_check'] def is_displayed(self): return self.round_number == Constants.num_rounds and self.player.type == 'C' class P23s_T3_Q3(Page): form_model = 'player' form_fields = ['verstanden', 'quality_check', 'ownpayoff', 'utilitarian'] def is_displayed(self): return self.round_number == Constants.num_rounds and self.player.type == 'seller' class P24_T3_Q4(Page): form_model = 'player' form_fields = ['partei', 'pol_selbstein'] def is_displayed(self): return self.player.round_number == Constants.num_rounds class P24b_T3_Q5(Page): form_model = 'player' form_fields = ['allocation1', 'allocation2', 'allocation3', 'allocation4', 'allocation5', 'allocation6'] def is_displayed(self): return self.player.round_number == Constants.num_rounds class W07_T4_ResultsWait(WaitPage): def after_all_players_arrive(self): self.group.set_payoff() def is_displayed(self): return self.round_number == Constants.num_rounds class P25_T4_ResultsT1(Page): def vars_for_template(self): seller_selection = self.group.in_round(1).seller_selection product_1 = self.group.get_player_by_id(1).in_round(1).T1_product product_2 = self.group.get_player_by_id(2).in_round(1).T1_product price_1 = self.group.get_player_by_id(1).in_round(1).T1_price price_2 = self.group.get_player_by_id(2).in_round(1).T1_price WTP_X = self.group.get_player_by_id(3).in_round(1).WTP_X WTP_Y = self.group.get_player_by_id(3).in_round(1).WTP_Y payoff = self.player.in_round(1).T1_payoff return dict( seller_selection = seller_selection, product_1 = product_1, product_2 =product_2, price_1 = price_1, price_2 = price_2, WTP_X = WTP_X, WTP_Y = WTP_Y, payoff = payoff ) def is_displayed(self): return self.round_number == Constants.num_rounds class P26_T4_StudyResults(Page): def vars_for_template(self): seller_selection = self.group.in_round(1).seller_selection product_1 = self.group.get_player_by_id(1).in_round(1).T1_product product_2 = self.group.get_player_by_id(2).in_round(1).T1_product price_1 = self.group.get_player_by_id(1).in_round(1).T1_price price_2 = self.group.get_player_by_id(2).in_round(1).T1_price WTP_X = self.group.get_player_by_id(3).in_round(1).WTP_X WTP_Y = self.group.get_player_by_id(3).in_round(1).WTP_Y T1_payoff = self.player.in_round(1).T1_payoff buyer_choice = self.group.get_player_by_id(3).in_round(self.group.round_payed).buyer_choice offer_order = self.group.in_round(self.group.round_payed).offer_order seller_1X = self.group.get_player_by_id(1).in_round(self.group.round_payed).field_maybe_none('seller_price_X') seller_2X = self.group.get_player_by_id(2).in_round(self.group.round_payed).field_maybe_none('seller_price_X') seller_1Y = self.group.get_player_by_id(1).in_round(self.group.round_payed).field_maybe_none('seller_price_Y') seller_2Y = self.group.get_player_by_id(2).in_round(self.group.round_payed).field_maybe_none('seller_price_Y') T2_product_1 = self.group.get_player_by_id(1).in_round(self.group.round_payed).T2_product T2_product_2 = self.group.get_player_by_id(2).in_round(self.group.round_payed).T2_product T2_payoff = self.player.in_round(self.group.round_payed).T2_payoff final_payoff = self.player.payoff.to_real_world_currency(self.session) return dict( seller_selection = seller_selection, product_1 = product_1, product_2 =product_2, price_1 = price_1, price_2 = price_2, WTP_X = WTP_X, WTP_Y = WTP_Y, T1_payoff = T1_payoff, buyer_choice = buyer_choice, offer_order = offer_order, seller_1X = seller_1X, seller_2X = seller_2X, seller_1Y = seller_1Y, seller_2Y = seller_2Y, T2_product_1 = T2_product_1, T2_product_2 = T2_product_2, T2_payoff = T2_payoff, final_payoff = final_payoff ) def is_displayed(self): return self.round_number == Constants.num_rounds class P27_T4_Payment(Page): form_model = 'player' form_fields = ['name', 'surname', 'method'] def is_displayed(self): return self.round_number == Constants.num_rounds class P28b_T4_Payment(Page): form_model = 'player' form_fields = ['IBAN'] def is_displayed(self): return self.player.method == "Banküberweisung" and self.round_number == Constants.num_rounds class P28p_T4_Payment(Page): form_model = 'player' form_fields = ['mail'] def is_displayed(self): return self.player.method == "PayPal" and self.round_number == Constants.num_rounds class P29_T4_End(Page): pass def is_displayed(self): return self.round_number == Constants.num_rounds page_sequence = [P01_Welcome, P02_Intro, P03_T1_Inst1, P04_T1_Inst2, P05_T1_Inst3, P06_T1_Inst4, P07_T1_Control1, P08_T1_Control2, P09_T1_Role, P10_T1_Seller, P10_T1_BuyerFrame, #P10x_T1_Buyer, #P10y_T1_Buyer, #P10zx_T1_Buyer, W02_T1_PayoffWait, P11_T2_Intro, P12_T2_Inst1, P13_T2_Inst2, P14_T2_Inst3, P15_T2_Inst4, P16_T2_Control, W03_T2_ShuffleWait, W04_T2_GroupWait, P17_T2_Role, P18ax_T2_SellerOffer, P18ay_T2_SellerOffer, W05_T2_MarketWait, P18b_T2_Seller1Info, P18b_T2_Seller2Info, P18_T2_Buyer, W06_T2_PayoffWait, P19_T2_Feedback, P20_T3_Intro, P21_T3_Q1, P22_T3_Q2, P23b_T3_Q3, P23c_T3_Q3, P23s_T3_Q3, P24_T3_Q4, P24b_T3_Q5, W07_T4_ResultsWait, P25_T4_ResultsT1, P26_T4_StudyResults, #P27_T4_Payment, #P28b_T4_Payment, #P28p_T4_Payment, #P29_T4_End ]