from otree.api import Currency as c, currency_range from ._builtin import Page, WaitPage from .models import Constants class Wait_Page(WaitPage): pass class Initial_Page(Page): def is_displayed(self): return self.round_number == 1 def before_next_page(self): self.player.initial_score() class Decision_Making1(Page): timeout_seconds = 60 form_model = 'player' form_fields = ['buy_num'] def is_displayed(self): return self.round_number == 1 def before_next_page(self): self.player.calculate_score() def error_message(self, values): if values['buy_num'] is None: message_text = ''' 株を買う数を入力してください。 ''' return message_text if values['buy_num'] * self.player.stock_price > self.player.total_money: message_text = ''' 株を買う数と株の価格の積が%s以下になるようにしてください ''' % self.player.total_money return message_text class Decision_Making2(Page): timeout_seconds = 60 form_model = 'player' form_fields = ['sell_num','buy_num'] def is_displayed(self): return self.round_number > 1 def before_next_page(self): self.player.calculate_score() def error_message(self, values): if values['buy_num'] and values['sell_num']: message_text = ''' 株を買うか売るかどちらか一つにしてください。 ''' return message_text if values['buy_num'] is None and values['sell_num'] is None: message_text = ''' 株を買う数または売る数を入力してください。 買いも売りもしない場合は、0を入力してください。 ''' return message_text if values['buy_num'] is None: values['buy_num']=0 if values['buy_num'] * self.player.stock_price > self.player.total_money: message_text = ''' 株を買う数と株の価格の積が%s以下になるようにしてください ''' % self.player.total_money return message_text if values['sell_num'] is None: values['sell_num']=0 if values['sell_num'] > self.player.total_stock: message_text = ''' 株を売る数が%s以下になるようにしてください ''' % self.player.total_stock return message_text class ResultsWaitPage(WaitPage): pass class Results(Page): def before_next_page(self): if self.round_number < Constants.num_rounds: self.player.take_over() class Stockholder_benefit1(Page): def is_displayed(self): return self.player.benefit >0 form_model = 'player' form_fields = ['get'] class Stockholder_benefit2(Page): def is_displayed(self): return self.player.benefit==0 class Final_Result(Page): def is_displayed(self): return self.round_number == Constants.num_rounds def vars_for_template(self): self.player.final_score() page_sequence = [Initial_Page, Decision_Making1, Decision_Making2, Results, Stockholder_benefit1,Stockholder_benefit2, Final_Result]