from otree.api import Currency as c, currency_range from ._builtin import Page, WaitPage from .models import Constants class ReadOnly_sell(Page): # 表单 form_model = 'player' form_fields = ['stock_1_bid_amount', 'stock_2_bid_amount', 'stock_3_bid_amount', 'stock_4_bid_amount', 'stock_5_bid_amount', 'stock_6_bid_amount', 'stock_1_sell_amount', 'stock_2_sell_amount', 'stock_3_sell_amount', 'stock_4_sell_amount', 'stock_5_sell_amount', 'stock_6_sell_amount',] # %% 动态验证出售 def error_message(self, value): if self.player.stock_1_amount + value['stock_1_bid_amount'] - value['stock_1_sell_amount'] < 0: return '你没有那么多资产可以卖' elif self.player.stock_2_amount + value['stock_2_bid_amount'] - value['stock_2_sell_amount'] < 0: return '你没有那么多资产可以卖' elif self.player.stock_3_amount + value['stock_3_bid_amount'] - value['stock_3_sell_amount'] < 0: return '你没有那么多资产可以卖' elif self.player.stock_4_amount + value['stock_4_bid_amount'] - value['stock_4_sell_amount'] < 0: return '你没有那么多资产可以卖' elif self.player.stock_5_amount + value['stock_5_bid_amount'] - value['stock_5_sell_amount'] < 0: return '你没有那么多资产可以卖' elif self.player.stock_6_amount + value['stock_6_bid_amount'] - value['stock_6_sell_amount'] < 0: return '你没有那么多资产可以卖' elif self.player.money \ + value['stock_1_sell_amount'] * self.group.stock_1_price \ + value['stock_2_sell_amount'] * self.group.stock_2_price \ + value['stock_3_sell_amount'] * self.group.stock_3_price \ + value['stock_4_sell_amount'] * self.group.stock_4_price \ + value['stock_5_sell_amount'] * self.group.stock_5_price \ + value['stock_6_sell_amount'] * self.group.stock_6_price \ - value['stock_1_bid_amount'] * self.group.stock_1_price \ - value['stock_2_bid_amount'] * self.group.stock_2_price \ - value['stock_3_bid_amount'] * self.group.stock_3_price \ - value['stock_4_bid_amount'] * self.group.stock_4_price \ - value['stock_5_bid_amount'] * self.group.stock_5_price \ - value['stock_6_bid_amount'] * self.group.stock_6_price \ < 0: return '你没有那么多钱' # 页面到4轮后展示 def is_displayed(player): return player.round_number in [1, 2, 3, 4] def vars_for_template(self): self.player.update_money() self.player.round_number_4() self.group.update_stock_price() self.player.update_stock_1_amount() self.player.update_stock_2_amount() self.player.update_stock_3_amount() self.player.update_stock_4_amount() self.player.update_stock_5_amount() self.player.update_stock_6_amount() return { 'round_number': self.round_number, 'round_number_4': self.player.round_number_4, 'num_rounds': [i + 1 for i in range(Constants.num_rounds)], ## [1,2,3,4,....,num_rounds] 'money': format(round(self.player.money, 2), ','), 'stock_1_price': round(self.group.stock_1_price, 2), 'stock_2_price': round(self.group.stock_2_price, 2), 'stock_3_price': round(self.group.stock_3_price, 2), 'stock_4_price': round(self.group.stock_4_price, 2), 'stock_5_price': round(self.group.stock_5_price, 2), 'stock_6_price': round(self.group.stock_6_price, 2), 'stock_1_amount': self.player.stock_1_amount, 'stock_2_amount': self.player.stock_2_amount, 'stock_3_amount': self.player.stock_3_amount, 'stock_4_amount': self.player.stock_4_amount, 'stock_5_amount': self.player.stock_5_amount, 'stock_6_amount': self.player.stock_6_amount, 'stock_1_net_amount_history': self.player.stock_1_net_amount_history(), 'stock_2_net_amount_history': self.player.stock_2_net_amount_history(), 'stock_3_net_amount_history': self.player.stock_3_net_amount_history(), 'stock_4_net_amount_history': self.player.stock_4_net_amount_history(), 'stock_5_net_amount_history': self.player.stock_5_net_amount_history(), 'stock_6_net_amount_history': self.player.stock_6_net_amount_history(), } # 传递股价表格 def js_vars(self): return dict( highcharts_series=[ { 'name': 'Asset_A_price', 'data': [round(g.stock_1_price, 2) for g in self.group.in_all_rounds()] }, { 'name': 'Asset_B_price', 'data': [round(g.stock_2_price, 2) for g in self.group.in_all_rounds()] }, { 'name': 'Asset_C_price', 'data': [round(g.stock_3_price, 2) for g in self.group.in_all_rounds()] }, { 'name': 'Asset_D_price', 'data': [round(g.stock_4_price, 2) for g in self.group.in_all_rounds()] }, { 'name': 'Asset_E_price', 'data': [round(g.stock_5_price, 2) for g in self.group.in_all_rounds()] }, { 'name': 'Asset_F_price', 'data': [round(g.stock_6_price, 2) for g in self.group.in_all_rounds()] } ] ) def before_next_page(self): self.player.stock_1_amount = self.player.stock_1_amount + self.player.stock_1_bid_amount - self.player.stock_1_sell_amount self.player.stock_2_amount = self.player.stock_2_amount + self.player.stock_2_bid_amount - self.player.stock_2_sell_amount self.player.stock_3_amount = self.player.stock_3_amount + self.player.stock_3_bid_amount - self.player.stock_3_sell_amount self.player.stock_4_amount = self.player.stock_4_amount + self.player.stock_4_bid_amount - self.player.stock_4_sell_amount self.player.stock_5_amount = self.player.stock_5_amount + self.player.stock_5_bid_amount - self.player.stock_5_sell_amount self.player.stock_6_amount = self.player.stock_6_amount + self.player.stock_6_bid_amount - self.player.stock_6_sell_amount self.player.money = self.player.money \ + self.player.stock_1_sell_amount * self.group.stock_1_price \ + self.player.stock_2_sell_amount * self.group.stock_2_price \ + self.player.stock_3_sell_amount * self.group.stock_3_price \ + self.player.stock_4_sell_amount * self.group.stock_4_price \ + self.player.stock_5_sell_amount * self.group.stock_5_price \ + self.player.stock_6_sell_amount * self.group.stock_6_price \ - self.player.stock_1_bid_amount * self.group.stock_1_price \ - self.player.stock_2_bid_amount * self.group.stock_2_price \ - self.player.stock_3_bid_amount * self.group.stock_3_price \ - self.player.stock_4_bid_amount * self.group.stock_4_price \ - self.player.stock_5_bid_amount * self.group.stock_5_price \ - self.player.stock_6_bid_amount * self.group.stock_6_price if self.player.stock_1_bid_amount - self.player.stock_1_sell_amount == 0: self.player.stock_1_net_amount_str = '-' else: self.player.stock_1_net_amount_str = str(self.player.stock_1_bid_amount - self.player.stock_1_sell_amount) + ' (' + str(self.group.stock_1_price) + ')' if self.player.stock_2_bid_amount - self.player.stock_2_sell_amount == 0: self.player.stock_2_net_amount_str = '-' else: self.player.stock_2_net_amount_str = str(self.player.stock_2_bid_amount - self.player.stock_2_sell_amount) + ' (' + str(self.group.stock_2_price) + ')' if self.player.stock_3_bid_amount - self.player.stock_3_sell_amount == 0: self.player.stock_3_net_amount_str = '-' else: self.player.stock_3_net_amount_str = str(self.player.stock_3_bid_amount - self.player.stock_3_sell_amount) + ' (' + str(self.group.stock_3_price) + ')' if self.player.stock_4_bid_amount - self.player.stock_4_sell_amount == 0: self.player.stock_4_net_amount_str = '-' else: self.player.stock_4_net_amount_str = str(self.player.stock_4_bid_amount - self.player.stock_4_sell_amount) + ' (' + str(self.group.stock_4_price) + ')' if self.player.stock_5_bid_amount - self.player.stock_5_sell_amount == 0: self.player.stock_5_net_amount_str = '-' else: self.player.stock_5_net_amount_str = str(self.player.stock_5_bid_amount - self.player.stock_5_sell_amount) + ' (' + str(self.group.stock_5_price) + ')' if self.player.stock_6_bid_amount - self.player.stock_6_sell_amount == 0: self.player.stock_6_net_amount_str = '-' else: self.player.stock_6_net_amount_str = str(self.player.stock_6_bid_amount - self.player.stock_6_sell_amount) + ' (' + str(self.group.stock_6_price) + ')' class ReadOnly_4_clear(Page): form_model = 'player' def is_displayed(player): return player.round_number == 4 def vars_for_template(self): self.player.update_money() self.player.round_number_4() self.group.update_stock_price() self.player.update_stock_1_amount() self.player.update_stock_2_amount() self.player.update_stock_3_amount() self.player.update_stock_4_amount() self.player.update_stock_5_amount() self.player.update_stock_6_amount() self.player.final_money = self.player.money + \ self.player.stock_1_amount * self.group.stock_1_price + \ self.player.stock_2_amount * self.group.stock_2_price + \ self.player.stock_3_amount * self.group.stock_3_price + \ self.player.stock_4_amount * self.group.stock_4_price + \ self.player.stock_5_amount * self.group.stock_5_price + \ self.player.stock_6_amount * self.group.stock_6_price return { 'round_number': self.round_number, 'round_number_4': self.player.round_number_4, 'money': format(round(self.player.final_money, 2), ','), 'stock_1_price': round(self.group.stock_1_price, 2), 'stock_2_price': round(self.group.stock_2_price, 2), 'stock_3_price': round(self.group.stock_3_price, 2), 'stock_4_price': round(self.group.stock_4_price, 2), 'stock_5_price': round(self.group.stock_5_price, 2), 'stock_6_price': round(self.group.stock_6_price, 2), 'stock_1_amount': self.player.stock_1_amount, 'stock_2_amount': self.player.stock_2_amount, 'stock_3_amount': self.player.stock_3_amount, 'stock_4_amount': self.player.stock_4_amount, 'stock_5_amount': self.player.stock_5_amount, 'stock_6_amount': self.player.stock_6_amount, 'stock_1_net_amount_history': self.player.stock_1_net_amount_history(), 'stock_2_net_amount_history': self.player.stock_2_net_amount_history(), 'stock_3_net_amount_history': self.player.stock_3_net_amount_history(), 'stock_4_net_amount_history': self.player.stock_4_net_amount_history(), 'stock_5_net_amount_history': self.player.stock_5_net_amount_history(), 'stock_6_net_amount_history': self.player.stock_6_net_amount_history(), } def js_vars(self): return dict( highcharts_series=[ { 'name': 'Asset_A_price', 'data': [round(g.stock_1_price, 2) for g in self.group.in_all_rounds()] }, { 'name': 'Asset_B_price', 'data': [round(g.stock_2_price, 2) for g in self.group.in_all_rounds()] }, { 'name': 'Asset_C_price', 'data': [round(g.stock_3_price, 2) for g in self.group.in_all_rounds()] }, { 'name': 'Asset_D_price', 'data': [round(g.stock_4_price, 2) for g in self.group.in_all_rounds()] }, { 'name': 'Asset_E_price', 'data': [round(g.stock_5_price, 2) for g in self.group.in_all_rounds()] }, { 'name': 'Asset_F_price', 'data': [round(g.stock_6_price, 2) for g in self.group.in_all_rounds()] } ] ) class SellPage_sellable(Page): form_model = 'player' form_fields = ['stock_1_bid_amount', 'stock_2_bid_amount', 'stock_3_bid_amount', 'stock_4_bid_amount', 'stock_5_bid_amount', 'stock_6_bid_amount', 'stock_1_sell_amount', 'stock_2_sell_amount', 'stock_3_sell_amount', 'stock_4_sell_amount', 'stock_5_sell_amount', 'stock_6_sell_amount'] # %% 动态验证出售 def error_message(self, value): if self.player.stock_1_amount + value['stock_1_bid_amount'] - value['stock_1_sell_amount'] < 0: return '你没有那么多资产可以卖' elif self.player.stock_2_amount + value['stock_2_bid_amount'] - value['stock_2_sell_amount'] < 0: return '你没有那么多资产可以卖' elif self.player.stock_3_amount + value['stock_3_bid_amount'] - value['stock_3_sell_amount'] < 0: return '你没有那么多资产可以卖' elif self.player.stock_4_amount + value['stock_4_bid_amount'] - value['stock_4_sell_amount'] < 0: return '你没有那么多资产可以卖' elif self.player.stock_5_amount + value['stock_5_bid_amount'] - value['stock_5_sell_amount'] < 0: return '你没有那么多资产可以卖' elif self.player.stock_6_amount + value['stock_6_bid_amount'] - value['stock_6_sell_amount'] < 0: return '你没有那么多资产可以卖' elif self.player.money \ + value['stock_1_sell_amount'] * self.group.stock_1_price \ + value['stock_2_sell_amount'] * self.group.stock_2_price \ + value['stock_3_sell_amount'] * self.group.stock_3_price \ + value['stock_4_sell_amount'] * self.group.stock_4_price \ + value['stock_5_sell_amount'] * self.group.stock_5_price \ + value['stock_6_sell_amount'] * self.group.stock_6_price \ - value['stock_1_bid_amount'] * self.group.stock_1_price \ - value['stock_2_bid_amount'] * self.group.stock_2_price \ - value['stock_3_bid_amount'] * self.group.stock_3_price \ - value['stock_4_bid_amount'] * self.group.stock_4_price \ - value['stock_5_bid_amount'] * self.group.stock_5_price \ - value['stock_6_bid_amount'] * self.group.stock_6_price \ < 0: return '你没有那么多钱' # 页面到4轮后展示 def is_displayed(player): return player.round_number > 4 def vars_for_template(self): self.player.update_money() self.player.round_number_4() self.group.update_stock_price() self.player.update_stock_1_amount() self.player.update_stock_2_amount() self.player.update_stock_3_amount() self.player.update_stock_4_amount() self.player.update_stock_5_amount() self.player.update_stock_6_amount() return { 'round_number': self.round_number, 'round_number_4': self.player.round_number_4, 'num_rounds': [i + 1 for i in range(Constants.num_rounds)], ## [1,2,3,4,....,num_rounds] 'money': format(round(self.player.money, 2), ','), 'stock_1_price': round(self.group.stock_1_price, 2), 'stock_2_price': round(self.group.stock_2_price, 2), 'stock_3_price': round(self.group.stock_3_price, 2), 'stock_4_price': round(self.group.stock_4_price, 2), 'stock_5_price': round(self.group.stock_5_price, 2), 'stock_6_price': round(self.group.stock_6_price, 2), 'stock_1_amount': self.player.stock_1_amount, 'stock_2_amount': self.player.stock_2_amount, 'stock_3_amount': self.player.stock_3_amount, 'stock_4_amount': self.player.stock_4_amount, 'stock_5_amount': self.player.stock_5_amount, 'stock_6_amount': self.player.stock_6_amount, 'stock_1_net_amount_history': self.player.stock_1_net_amount_history(), 'stock_2_net_amount_history': self.player.stock_2_net_amount_history(), 'stock_3_net_amount_history': self.player.stock_3_net_amount_history(), 'stock_4_net_amount_history': self.player.stock_4_net_amount_history(), 'stock_5_net_amount_history': self.player.stock_5_net_amount_history(), 'stock_6_net_amount_history': self.player.stock_6_net_amount_history(), } # 传递股价表格 def js_vars(self): return dict( highcharts_series=[ { 'name': 'Asset_A_price', 'data': [round(g.stock_1_price, 2) for g in self.group.in_all_rounds()] }, { 'name': 'Asset_B_price', 'data': [round(g.stock_2_price, 2) for g in self.group.in_all_rounds()] }, { 'name': 'Asset_C_price', 'data': [round(g.stock_3_price, 2) for g in self.group.in_all_rounds()] }, { 'name': 'Asset_D_price', 'data': [round(g.stock_4_price, 2) for g in self.group.in_all_rounds()] }, { 'name': 'Asset_E_price', 'data': [round(g.stock_5_price, 2) for g in self.group.in_all_rounds()] }, { 'name': 'Asset_F_price', 'data': [round(g.stock_6_price, 2) for g in self.group.in_all_rounds()] } ] ) def before_next_page(self): self.player.stock_1_amount = self.player.stock_1_amount + self.player.stock_1_bid_amount - self.player.stock_1_sell_amount self.player.stock_2_amount = self.player.stock_2_amount + self.player.stock_2_bid_amount - self.player.stock_2_sell_amount self.player.stock_3_amount = self.player.stock_3_amount + self.player.stock_3_bid_amount - self.player.stock_3_sell_amount self.player.stock_4_amount = self.player.stock_4_amount + self.player.stock_4_bid_amount - self.player.stock_4_sell_amount self.player.stock_5_amount = self.player.stock_5_amount + self.player.stock_5_bid_amount - self.player.stock_5_sell_amount self.player.stock_6_amount = self.player.stock_6_amount + self.player.stock_6_bid_amount - self.player.stock_6_sell_amount self.player.money = self.player.money \ + self.player.stock_1_sell_amount * self.group.stock_1_price \ + self.player.stock_2_sell_amount * self.group.stock_2_price \ + self.player.stock_3_sell_amount * self.group.stock_3_price \ + self.player.stock_4_sell_amount * self.group.stock_4_price \ + self.player.stock_5_sell_amount * self.group.stock_5_price \ + self.player.stock_6_sell_amount * self.group.stock_6_price \ - self.player.stock_1_bid_amount * self.group.stock_1_price \ - self.player.stock_2_bid_amount * self.group.stock_2_price \ - self.player.stock_3_bid_amount * self.group.stock_3_price \ - self.player.stock_4_bid_amount * self.group.stock_4_price \ - self.player.stock_5_bid_amount * self.group.stock_5_price \ - self.player.stock_6_bid_amount * self.group.stock_6_price if self.player.stock_1_bid_amount - self.player.stock_1_sell_amount == 0: self.player.stock_1_net_amount_str = '-' else: self.player.stock_1_net_amount_str = str(self.player.stock_1_bid_amount - self.player.stock_1_sell_amount) + ' (' + str(self.group.stock_1_price) + ')' if self.player.stock_2_bid_amount - self.player.stock_2_sell_amount == 0: self.player.stock_2_net_amount_str = '-' else: self.player.stock_2_net_amount_str = str(self.player.stock_2_bid_amount - self.player.stock_2_sell_amount) + ' (' + str(self.group.stock_2_price) + ')' if self.player.stock_3_bid_amount - self.player.stock_3_sell_amount == 0: self.player.stock_3_net_amount_str = '-' else: self.player.stock_3_net_amount_str = str(self.player.stock_3_bid_amount - self.player.stock_3_sell_amount) + ' (' + str(self.group.stock_3_price) + ')' if self.player.stock_4_bid_amount - self.player.stock_4_sell_amount == 0: self.player.stock_4_net_amount_str = '-' else: self.player.stock_4_net_amount_str = str(self.player.stock_4_bid_amount - self.player.stock_4_sell_amount) + ' (' + str(self.group.stock_4_price) + ')' if self.player.stock_5_bid_amount - self.player.stock_5_sell_amount == 0: self.player.stock_5_net_amount_str = '-' else: self.player.stock_5_net_amount_str = str(self.player.stock_5_bid_amount - self.player.stock_5_sell_amount) + ' (' + str(self.group.stock_5_price) + ')' if self.player.stock_6_bid_amount - self.player.stock_6_sell_amount == 0: self.player.stock_6_net_amount_str = '-' else: self.player.stock_6_net_amount_str = str(self.player.stock_6_bid_amount - self.player.stock_6_sell_amount) + ' (' + str(self.group.stock_6_price) + ')' class WaitToStart(WaitPage): @staticmethod def after_all_players_arrive(group): import time group.start_timestamp = int(time.time()) class Forecast(Page): form_model = 'player' form_fields = ['Asset_A_forecast', 'Asset_B_forecast', 'Asset_C_forecast', 'Asset_D_forecast', 'Asset_E_forecast', 'Asset_F_forecast'] def is_displayed(player): return player.round_number in [11, 18] def vars_for_template(self): self.player.round_number_4() return { 'round_number': self.round_number, 'round_number_4': self.player.round_number_4, } def before_next_page(self): if self.player.Asset_A_forecast == Constants.bad: self.player.forecast = self.player.forecast + 100 if self.player.Asset_B_forecast == Constants.good: self.player.forecast = self.player.forecast + 100 if self.player.Asset_C_forecast == Constants.normal: self.player.forecast = self.player.forecast + 100 if self.player.Asset_D_forecast == Constants.best: self.player.forecast = self.player.forecast + 100 if self.player.Asset_E_forecast == Constants.worst: self.player.forecast = self.player.forecast + 100 if self.player.Asset_F_forecast == Constants.normal: self.player.forecast = self.player.forecast + 100 print('预测结果是:', self.player.forecast) def js_vars(self): return dict( highcharts_series=[ { 'name': 'Asset_A_price', 'data': [round(g.stock_1_price, 2) for g in self.group.in_all_rounds()] }, { 'name': 'Asset_B_price', 'data': [round(g.stock_2_price, 2) for g in self.group.in_all_rounds()] }, { 'name': 'Asset_C_price', 'data': [round(g.stock_3_price, 2) for g in self.group.in_all_rounds()] }, { 'name': 'Asset_D_price', 'data': [round(g.stock_4_price, 2) for g in self.group.in_all_rounds()] }, { 'name': 'Asset_E_price', 'data': [round(g.stock_5_price, 2) for g in self.group.in_all_rounds()] }, { 'name': 'Asset_F_price', 'data': [round(g.stock_6_price, 2) for g in self.group.in_all_rounds()] } ] ) class Clear(Page): # timeout_seconds = 10 form_model = 'player' def is_displayed(player): return player.round_number == Constants.num_rounds def vars_for_template(self): self.player.round_number_4() self.player.final_money = self.player.money + \ self.player.stock_1_amount * self.group.stock_1_price + \ self.player.stock_2_amount * self.group.stock_2_price + \ self.player.stock_3_amount * self.group.stock_3_price + \ self.player.stock_4_amount * self.group.stock_4_price + \ self.player.stock_5_amount * self.group.stock_5_price + \ self.player.stock_6_amount * self.group.stock_6_price self.player.total_forecast() self.player.forecast_times = self.player.final_forecast / 100 self.player.rmb = (self.player.final_money + self.player.final_forecast) / 200 return { 'round_number': self.round_number, 'round_number_4': self.player.round_number_4, 'money': format(round(self.player.final_money, 2), ','), 'final_forecast': self.player.final_forecast, 'forecast_times': self.player.forecast_times, 'rmb': format(round(self.player.rmb, 2), ','), 'stock_1_net_amount_history': self.player.stock_1_net_amount_history(), 'stock_2_net_amount_history': self.player.stock_2_net_amount_history(), 'stock_3_net_amount_history': self.player.stock_3_net_amount_history(), 'stock_4_net_amount_history': self.player.stock_4_net_amount_history(), 'stock_5_net_amount_history': self.player.stock_5_net_amount_history(), 'stock_6_net_amount_history': self.player.stock_6_net_amount_history(), } def js_vars(self): return dict( highcharts_series=[ { 'name': 'Asset_A_price', 'data': [round(g.stock_1_price, 2) for g in self.group.in_all_rounds()] }, { 'name': 'Asset_B_price', 'data': [round(g.stock_2_price, 2) for g in self.group.in_all_rounds()] }, { 'name': 'Asset_C_price', 'data': [round(g.stock_3_price, 2) for g in self.group.in_all_rounds()] }, { 'name': 'Asset_D_price', 'data': [round(g.stock_4_price, 2) for g in self.group.in_all_rounds()] }, { 'name': 'Asset_E_price', 'data': [round(g.stock_5_price, 2) for g in self.group.in_all_rounds()] }, { 'name': 'Asset_F_price', 'data': [round(g.stock_6_price, 2) for g in self.group.in_all_rounds()] } ] ) class friends(Page): form_model = 'player' form_fields = ['friend', 'roommates'] def is_displayed(player): return player.round_number in [18] class survey(Page): form_model = 'player' form_fields = ['risk1', 'risk2', 'risk3', 'risk4', 'risk5', 'risk6', 'risk7', 'risk8', 'risk9', 'risk10', 'time_preference_today1_1', 'time_preference_today1_2', 'time_preference_today1_3', 'time_preference_today1_4', 'time_preference_today1_5', 'time_preference_today1_6', 'time_preference_today1_7', 'time_preference_today5_1', 'time_preference_today5_2', 'time_preference_today5_3', 'time_preference_today5_4', 'time_preference_today5_5', 'time_preference_today5_6', 'time_preference_today5_7', 'time_preference_tomorrow9_1', 'time_preference_tomorrow9_2', 'time_preference_tomorrow9_3', 'time_preference_tomorrow9_4', 'time_preference_tomorrow9_5', 'time_preference_tomorrow9_6', 'time_preference_tomorrow9_7', 'time_preference_tomorrow30_1', 'time_preference_tomorrow30_2', 'time_preference_tomorrow30_3', 'time_preference_tomorrow30_4', 'time_preference_tomorrow30_5', 'time_preference_tomorrow30_6', 'time_preference_tomorrow30_7'] def is_displayed(player): return player.round_number in [18] class endpage(Page): # timeout_seconds = 10 form_model = 'player' def is_displayed(player): return player.round_number in [18] def vars_for_template(self): self.player.round_number_4() self.player.final_money = self.player.money + \ self.player.stock_1_amount * self.group.stock_1_price + \ self.player.stock_2_amount * self.group.stock_2_price + \ self.player.stock_3_amount * self.group.stock_3_price + \ self.player.stock_4_amount * self.group.stock_4_price + \ self.player.stock_5_amount * self.group.stock_5_price + \ self.player.stock_6_amount * self.group.stock_6_price self.player.rmb = self.player.final_money / 200 return { 'round_number': self.round_number, 'round_number_4': self.player.round_number_4, 'money': format(round(self.player.final_money, 2), ','), 'rmb': format(round(self.player.rmb, 2), ',') } page_sequence = [ReadOnly_sell, ReadOnly_4_clear, SellPage_sellable, Forecast, WaitToStart, Clear, survey, friends, ] # page_sequence = [ReadOnly_sell, ReadOnly_4_clear, SellPage_sellable, Forecast, Clear, ]