from otree.api import * c = cu doc = '' class C(BaseConstants): NAME_IN_URL = 'Game' PLAYERS_PER_GROUP = None NUM_ROUNDS = 1 WORKER_ROLE = 'employee' MANAGER_ROLE = 'manager' CSR_ACTIVITY = False INCENTIVE = False CASE_5 = False EXCHANGE_RATE = 100 DECODE_PAYOFF = 10 MY_CONSTANT = () ANSWERS = ('C', 'ZYCQM', 'BK', 'GD', 'WNAPQ', 'N', 'JZH', 'GKV', 'AI', 'KVP', 'GCVMQ', 'FLYQW', 'TPZBN', 'UT', 'NYA', 'CDR', 'S', 'V', 'PR', 'YF', 'SKPEZ', 'RMBGA', 'BVCET', 'SYRFW', 'EIJ', 'LWF', 'R', 'CIT', 'GJQUZ', 'M', 'C', 'GLR', 'HU', 'CTXK', 'VQO', 'O', 'P', 'VQBWR', 'JQKGI', 'YT', 'Z', 'SHZU', 'FRMC', 'G', 'ZY', 'EPT', 'IS', 'VGSH', 'RBW', 'CG', 'DKSM', 'IMHZP', 'Q', 'UXO', 'UXH', 'FOKZ', 'J', 'WPZA', 'J', 'SOJP', 'NK', 'YD', 'G', 'APNXL', 'FNRE', 'IST', 'CT', 'U', 'HKZMS', 'VXF', 'I', 'JSC', 'GKVSE', 'YTQS', 'Z', 'GEQ', 'ET', 'MTZC', 'RH', 'JZLK', 'AQNY', 'X', 'SIW', 'XH', 'W', 'WIXA', 'FY', 'SC', 'YDVCI', 'BE', 'VU', 'ZOX', 'UE', 'S', 'WAZC', 'Z', 'H', 'US', 'H', 'PK') TASKS = (23, 3830232436, 3332, 3125, 3521422624, 21, 443837, 313222, 4220, 322226, 3123223624, 3929302435, 4126383321, 4041, 213042, 232534, 45, 22, 2634, 3039, 4532262838, 3436333142, 3322232841, 4530343935, 282044, 293539, 34, 232041, 3144244038, 36, 23, 312934, 3740, 23414332, 222427, 27, 26, 2224333534, 4424323120, 3041, 38, 45373840, 39343623, 31, 3830, 282641, 2045, 22314537, 343335, 2331, 25324536, 2036373826, 24, 404327, 404337, 39273238, 44, 35263842, 44, 45274426, 2132, 3025, 31, 4226214329, 39213428, 204541, 2341, 40, 3732383645, 224339, 20, 444523, 3132224528, 30412445, 38, 312824, 2841, 36413823, 3437, 44382932, 42242130, 43, 452035, 4337, 35, 35204342, 3930, 4523, 3025222320, 3328, 2240, 382743, 4028, 45, 35423823, 38, 37, 4045, 37, 2632) class Subsession(BaseSubsession): pass def my_function(subsession: Subsession): pass class Group(BaseGroup): task_2_manager_payoff = models.IntegerField() task_2_employee_payoff = models.IntegerField() class Player(BasePlayer): consent = models.BooleanField(choices=[[True, 'I consent, begin the study.'], [False, 'I do not consent, I do not wish to take part in the study.']]) keep_same_role = models.BooleanField(choices=[[True, 'True'], [False, 'False']]) identity_will_be_disclosed = models.BooleanField(choices=[[True, 'True'], [False, 'False']]) how_many_output_points = models.IntegerField(choices=[[50, '50'], [100, '100'], [1000, '1000']]) can_end_the_task_earlier = models.BooleanField(choices=[[True, 'Yes'], [False, 'No']]) manager_informed_about_the_output = models.BooleanField(choices=[[True, 'Yes'], [False, 'No']]) how_many_points = models.IntegerField(choices=[[50, '50'], [200, '200'], [400, '400']]) manager_informed_about_actual_costs = models.BooleanField(choices=[[True, 'Yes'], [False, 'No']]) the_firm_will_always_pay = models.BooleanField(choices=[[True, 'Yes'], [False, 'No']]) requested_funds_are_higher = models.BooleanField(choices=[[True, 'Yes'], [False, 'No']]) answer = models.StringField(blank=True) numbers_decoded_correctly = models.IntegerField(initial=0) random_number = models.IntegerField() task_2_request = models.IntegerField(blank=True, max=2500) confirm_request = models.BooleanField(label='Confirm') task_2_payoff = models.IntegerField(initial=0) agreement = models.IntegerField(choices=[[1, '1'], [2, '2'], [3, '3'], [4, '4'], [5, '5'], [6, '6'], [7, '7']], label='Please indicate your agreement with the following statements (1 - Fully disagree, 7 - Fully agree):', widget=widgets.RadioSelectHorizontal) phase_of_studies = models.StringField(choices=[['Master', 'Master'], ['Bachelor', 'Bachelor'], ['Other', 'Other']]) phase_of_studies_other = models.StringField(blank=True) major = models.StringField() participated = models.BooleanField(choices=[[True, 'Yes'], [False, 'No']]) work_experience = models.StringField() age = models.IntegerField() gender = models.StringField(choices=[['Female', 'Female'], ['Male', 'Male'], ['Non-binary', 'Non-binary'], ['In another way (specify if you wish)', 'In another way (specify if you wish)'], ['Prefer not to say', 'Prefer not to say']]) gender_other = models.StringField(blank=True) def generate_random_number(player: Player): import random player.random_number = random.randint(1, 100) class Test(Page): form_model = 'player' @staticmethod def is_displayed(player: Player): return ( player.role == 'manager') class Task_2_employee_p1(Page): form_model = 'player' @staticmethod def is_displayed(player: Player): return ( player.role == 'employee') class Task_2_employee_p2(Page): form_model = 'player' form_fields = ['task_2_request'] @staticmethod def is_displayed(player: Player): return ( player.role == 'employee') @staticmethod def before_next_page(player: Player, timeout_happened): group = player.group group.get_player_by_role(C.MANAGER_ROLE).task_2_payoff = 2500-group.get_player_by_role(C.WORKER_ROLE).task_2_request group.get_player_by_role(C.WORKER_ROLE).task_2_payoff = group.get_player_by_role(C.WORKER_ROLE).task_2_request - 920 class Task_2_employee_p3(Page): form_model = 'player' form_fields = ['task_2_request'] @staticmethod def is_displayed(player: Player): return ( player.role == 'employee') @staticmethod def vars_for_template(player: Player): group = player.group m = group.get_player_by_role(C.MANAGER_ROLE).task_2_payoff e = group.get_player_by_role(C.WORKER_ROLE).task_2_payoff return dict(e=e,m=m,) @staticmethod def before_next_page(player: Player, timeout_happened): group = player.group group.get_player_by_role(C.MANAGER_ROLE).task_2_payoff = 2500-group.get_player_by_role(C.WORKER_ROLE).task_2_request group.get_player_by_role(C.WORKER_ROLE).task_2_payoff = group.get_player_by_role(C.WORKER_ROLE).task_2_request - 920 class MyWaitPage(WaitPage): wait_for_all_groups = True title_text = 'PUK' @staticmethod def is_displayed(player: Player): return ( player.role == 'manager') class Task_2_manager_approve(Page): form_model = 'player' form_fields = ['confirm_request'] @staticmethod def is_displayed(player: Player): return ( player.role == 'manager') @staticmethod def vars_for_template(player: Player): group = player.group m = group.get_player_by_role(C.MANAGER_ROLE).task_2_payoff e = group.get_player_by_role(C.WORKER_ROLE).task_2_payoff return dict(e=e,m=m,) class Task_2_res(Page): form_model = 'player' @staticmethod def vars_for_template(player: Player): group = player.group m = group.get_player_by_role(C.MANAGER_ROLE).task_2_payoff e = group.get_player_by_role(C.WORKER_ROLE).task_2_payoff er = group.get_player_by_role(C.WORKER_ROLE).task_2_request return dict(e=e,m=m, er = er) class Questionnaire(Page): form_model = 'player' form_fields = ['agreement'] timeout_seconds = 60 class Demographic_information(Page): form_model = 'player' form_fields = ['phase_of_studies', 'phase_of_studies_other', 'major', 'participated', 'work_experience', 'age', 'gender', 'gender_other'] class Compensation(Page): form_model = 'player' class Consent_Form(Page): form_model = 'player' form_fields = ['consent'] class General_information(Page): form_model = 'player' class The_Firm_and_the_Roles(Page): form_model = 'player' form_fields = ['keep_same_role', 'identity_will_be_disclosed'] class Your_Role(Page): form_model = 'player' class Task1_cond5(Page): form_model = 'player' @staticmethod def is_displayed(player: Player): return C.CASE_5 class Task1_example_employee(Page): form_model = 'player' form_fields = ['how_many_output_points', 'can_end_the_task_earlier', 'manager_informed_about_the_output', 'how_many_points', 'answer'] @staticmethod def is_displayed(player: Player): return (not(C.CASE_5) and player.role == 'employee') class Task1_example_manager(Page): form_model = 'player' form_fields = ['how_many_output_points', 'can_end_the_task_earlier', 'manager_informed_about_the_output', 'how_many_points', 'answer'] @staticmethod def is_displayed(player: Player): return (not(C.CASE_5) and player.role == 'manager') class The_Financial_Consequences_of_Task_1(Page): form_model = 'player' @staticmethod def is_displayed(player: Player): return not(C.CASE_5) class Task_2_explanation_employee(Page): form_model = 'player' form_fields = ['requested_funds_are_higher', 'the_firm_will_always_pay', 'manager_informed_about_actual_costs'] @staticmethod def is_displayed(player: Player): return player.role == 'employee' class Task_2_explanation_manager(Page): form_model = 'player' form_fields = ['requested_funds_are_higher', 'the_firm_will_always_pay', 'manager_informed_about_actual_costs'] @staticmethod def is_displayed(player: Player): return player.role == 'manager' class Payoffs(Page): form_model = 'player' @staticmethod def is_displayed(player: Player): return not(C.CASE_5) class Start_practice_round(Page): form_model = 'player' @staticmethod def is_displayed(player: Player): return not(C.CASE_5) class Practice_round_employee(Page): form_model = 'player' form_fields = ['answer'] timeout_seconds = 30 class Task_1_summary_employee(Page): form_model = 'player' page_sequence = [Test, Task_2_employee_p1, Task_2_employee_p2, Task_2_employee_p3, MyWaitPage, Task_2_manager_approve, Task_2_res, Questionnaire, Demographic_information, Compensation, Consent_Form, General_information, The_Firm_and_the_Roles, Your_Role, Task1_cond5, Task1_example_employee, Task1_example_manager, The_Financial_Consequences_of_Task_1, Task_2_explanation_employee, Task_2_explanation_manager, Payoffs, Start_practice_round, Practice_round_employee, Task_1_summary_employee]