from otree.api import Currency as c, currency_range from ._builtin import Page, WaitPage from .models import Constants class Test(Page): form_model = "player" form_fields = ["test_1", "test_2", "test_3", "test_4", "test_5", "test_6", "test_7" ] def is_displayed(self): return self.round_number == 1 def test_1_error_message(player, test_1): if not test_1: return '※ ✖️(2人組 → 4人組)' def test_2_error_message(player, test_2): if not test_2: return '※ ◯' def test_3_error_message(player, test_3): if not test_3: return '※ ◯' def test_4_error_message(player, test_4): if not test_4: return '※ ✖️(実験2もオーナーとなる → 実験2では経営者となる)' def test_5_error_message(player, test_5): if not test_5: return '※ ◯' def test_6_error_message(player, test_6): if not test_6: return '※ ✖️(契約1が利潤に比例し、契約2が売上高に比例する)' def test_7_error_message(player, test_7): if not test_7: return '※ ✖️(4800 → 4200)' class Introduction(Page): pass class Owner(Page): form_model = 'player' form_fields = ['contract'] def is_displayed(self): return self.player.id_in_group == Constants.company1_owner_id or self.player.id_in_group == Constants.company2_owner_id def vars_for_template(self): profit00_lst = self.group.cal_table00() sales01_lst = self.group.cal_table01() return dict( profit001_lst = profit00_lst[0], profit002_lst = profit00_lst[1], profit003_lst = profit00_lst[2], profit004_lst = profit00_lst[3], sales011_lst = sales01_lst[0], sales012_lst = sales01_lst[1], sales013_lst = sales01_lst[2], sales014_lst = sales01_lst[3], ) class Wait1(WaitPage): pass class Information(Page): def is_displayed(self): return self.player.id_in_group == Constants.company1_owner_id or self.player.id_in_group == Constants.company2_owner_id def vars_for_template(self): return dict( # 企業1の所有者 c1 = self.group.get_player_by_id(Constants.company1_owner_id).contract, # 企業2の所有者 c2 = self.group.get_player_by_id(Constants.company2_owner_id).contract, ) class Manager(Page): form_model = 'player' form_fields = ['production'] def is_displayed(self): return self.player.id_in_group == Constants.company1_manager_id or self.player.id_in_group == Constants.company2_manager_id def vars_for_template(self): c1_owner_decision = self.group.get_player_by_id(Constants.company1_owner_id).contract c2_owner_decision = self.group.get_player_by_id(Constants.company2_owner_id).contract # 利得表算出関数を実行 # なおritoku11_lstは二次元配列 ritoku11_lst = self.group.cal_table11() ritoku22_lst = self.group.cal_table22() return dict( c1 = c1_owner_decision, c2 = c2_owner_decision, # 2次元配列なので普通のリストに一個ずつ取り出す(自社もライバルも契約1、自社1とライバル2のパターンも同値) ritoku111_lst = ritoku11_lst[0], ritoku112_lst = ritoku11_lst[1], ritoku113_lst = ritoku11_lst[2], ritoku114_lst = ritoku11_lst[3], # 2次元配列なので普通のリストに一個ずつ取り出す(自社もライバルも契約2、自社2とライバル1のパターンも同値) ritoku221_lst = ritoku22_lst[0], ritoku222_lst = ritoku22_lst[1], ritoku223_lst = ritoku22_lst[2], ritoku224_lst = ritoku22_lst[3], ) class ResultsWaitPage(WaitPage): after_all_players_arrive = 'set_ritoku' class Results(Page): def vars_for_template(self): return dict( # 企業1の所有者 c1 = self.group.get_player_by_id(Constants.company1_owner_id).contract, # 企業2の所有者 c2 = self.group.get_player_by_id(Constants.company2_owner_id).contract, # 企業1の経営者 company1_production = self.group.get_player_by_id(Constants.company1_manager_id).production, # 企業2の経営者 company2_production = self.group.get_player_by_id(Constants.company2_manager_id).production, # 経営者の生産量の合計 total_production = self.group.get_player_by_id(Constants.company1_manager_id).production + self.group.get_player_by_id(Constants.company2_manager_id).production, # 市場価格 price = Constants.a - (self.group.get_player_by_id(Constants.company1_manager_id).production + self.group.get_player_by_id(Constants.company2_manager_id).production), ) page_sequence = [ Test, Introduction, Owner, Wait1, Information, Manager, ResultsWaitPage, Results, ]