from otree.api import * import psycopg2 import sqlite3 import math class C(BaseConstants): NAME_IN_URL = 'performance_evaluation_v1' PLAYERS_PER_GROUP = None NUM_ROUNDS = 1 class Subsession(BaseSubsession): pass class Group(BaseGroup): pass class DecodeStrings(ExtraModel): record_id = models.IntegerField(null=False,primary_key=True) letters = models.CharField(max_length=50) numbers = models.CharField(max_length=50) class OnlineWorkers(ExtraModel): worker_id = models.CharField(max_length=50) class EmployeeGroup(ExtraModel): condition = models.IntegerField() group_id = models.IntegerField() is_taken = models.IntegerField() p1_total_output_a = models.IntegerField() p1_helped_others_a = models.StringField() p1_received_help_a = models.StringField() p2_total_output_a = models.IntegerField() p2_helped_others_a = models.StringField() p2_received_help_a = models.StringField() p3_total_output_a = models.IntegerField() p3_helped_others_a = models.StringField() p3_received_help_a = models.StringField() p4_total_output_a = models.IntegerField() p4_helped_others_a = models.StringField() p4_received_help_a = models.StringField() p1_total_output_b = models.IntegerField() p1_helped_others_b = models.StringField() p1_received_help_b = models.StringField() p2_total_output_b = models.IntegerField() p2_helped_others_b = models.StringField() p2_received_help_b = models.StringField() p3_total_output_b = models.IntegerField() p3_helped_others_b = models.StringField() p3_received_help_b = models.StringField() p4_total_output_b = models.IntegerField() p4_helped_others_b = models.StringField() p4_received_help_b = models.StringField() p1_total_output_c = models.IntegerField() p1_helped_others_c = models.StringField() p1_received_help_c = models.StringField() p2_total_output_c = models.IntegerField() p2_helped_others_c = models.StringField() p2_received_help_c = models.StringField() p3_total_output_c = models.IntegerField() p3_helped_others_c = models.StringField() p3_received_help_c = models.StringField() p4_total_output_c = models.IntegerField() p4_helped_others_c = models.StringField() p4_received_help_c = models.StringField() p1_total_output_d = models.IntegerField() p1_helped_others_d = models.StringField() p1_received_help_d = models.StringField() p2_total_output_d = models.IntegerField() p2_helped_others_d = models.StringField() p2_received_help_d = models.StringField() p3_total_output_d = models.IntegerField() p3_helped_others_d = models.StringField() p3_received_help_d = models.StringField() p4_total_output_d = models.IntegerField() p4_helped_others_d = models.StringField() p4_received_help_d = models.StringField() class EmployeeMatch(ExtraModel): condition = models.IntegerField() group_id = models.IntegerField() group_taken = models.IntegerField(initial=0) class Player(BasePlayer): worker_id = models.CharField(initial='e') mturk_dupe = models.IntegerField() participant_number = models.IntegerField(default=0) total_compensation = models.StringField(default='Not Finished') player_label = models.StringField() condition = models.IntegerField() informed_consent = models.StringField(initial=None, choices=[('Yes', 'Yes'), ('No', 'No')], verbose_name='', widget=widgets.RadioSelect()) kc1 = models.StringField(initial=None, choices=['True', 'False'], verbose_name='', widget=widgets.RadioSelect()) kc2 = models.StringField(initial=None, choices=['True', 'False'], verbose_name='', widget=widgets.RadioSelect()) kc3 = models.StringField(initial=None, choices=['True', 'False'], verbose_name='', widget=widgets.RadioSelect()) kc4 = models.StringField(initial=None, choices=['True', 'False'], verbose_name='', widget=widgets.RadioSelect()) kc5 = models.StringField(initial=None, choices=[('a', '1; 4'), ('b', '2; 3'), ('c', '4; 1'), ('d', '3; 2')], verbose_name='', widget=widgets.RadioSelect()) kc6 = models.StringField(initial=None, choices=['True', 'False'], verbose_name='', widget=widgets.RadioSelect()) kc7 = models.StringField(initial=None, choices=['True', 'False'], verbose_name='', widget=widgets.RadioSelect()) kc8 = models.StringField(initial=None, choices=['True', 'False'], verbose_name='', widget=widgets.RadioSelect()) kc9 = models.StringField(initial=None, choices=['True', 'False'], verbose_name='', widget=widgets.RadioSelect()) kc10 = models.StringField(initial=None, choices=['True', 'False'], verbose_name='', widget=widgets.RadioSelect()) kc11 = models.StringField(initial=None, choices=['True', 'False'], verbose_name='', widget=widgets.RadioSelect()) kc12 = models.StringField(initial=None, choices=['True', 'False'], verbose_name='', widget=widgets.RadioSelect()) kc13 = models.StringField(initial=None, choices=['True', 'False'], verbose_name='', widget=widgets.RadioSelect()) practice_num_attempted = models.IntegerField() practice_num_decoded = models.IntegerField() employee_group_id = models.IntegerField() p1_A_output = models.IntegerField() #Also store performance information for ease of access p1_A_helped = models.StringField() p1_A_was_helped = models.StringField() p1_B_output = models.IntegerField() p1_B_helped = models.StringField() p1_B_was_helped = models.StringField() p1_C_output = models.IntegerField() p1_C_helped = models.StringField() p1_C_was_helped = models.StringField() p1_D_output = models.IntegerField() p1_D_helped = models.StringField() p1_D_was_helped = models.StringField() p2_A_output = models.IntegerField() p2_A_helped = models.StringField() p2_A_was_helped = models.StringField() p2_B_output = models.IntegerField() p2_B_helped = models.StringField() p2_B_was_helped = models.StringField() p2_C_output = models.IntegerField() p2_C_helped = models.StringField() p2_C_was_helped = models.StringField() p2_D_output = models.IntegerField() p2_D_helped = models.StringField() p2_D_was_helped = models.StringField() p3_A_output = models.IntegerField() p3_A_helped = models.StringField() p3_A_was_helped = models.StringField() p3_B_output = models.IntegerField() p3_B_helped = models.StringField() p3_B_was_helped = models.StringField() p3_C_output = models.IntegerField() p3_C_helped = models.StringField() p3_C_was_helped = models.StringField() p3_D_output = models.IntegerField() p3_D_helped = models.StringField() p3_D_was_helped = models.StringField() p4_A_output = models.IntegerField() p4_A_helped = models.StringField() p4_A_was_helped = models.StringField() p4_B_output = models.IntegerField() p4_B_helped = models.StringField() p4_B_was_helped = models.StringField() p4_C_output = models.IntegerField() p4_C_helped = models.StringField() p4_C_was_helped = models.StringField() p4_D_output = models.IntegerField() p4_D_helped = models.StringField() p4_D_was_helped = models.StringField() p1_A_rating = models.IntegerField() p1_A_bonus = models.IntegerField() p1_B_rating = models.IntegerField() p1_B_bonus = models.IntegerField() p1_C_rating = models.IntegerField() p1_C_bonus = models.IntegerField() p1_D_rating = models.IntegerField() p1_D_bonus = models.IntegerField() p1_decision_time = models.StringField() p2_A_rating = models.IntegerField() p2_A_bonus = models.IntegerField() p2_B_rating = models.IntegerField() p2_B_bonus = models.IntegerField() p2_C_rating = models.IntegerField() p2_C_bonus = models.IntegerField() p2_D_rating = models.IntegerField() p2_D_bonus = models.IntegerField() p2_decision_time = models.StringField() p3_A_rating = models.IntegerField() p3_A_bonus = models.IntegerField() p3_B_rating = models.IntegerField() p3_B_bonus = models.IntegerField() p3_C_rating = models.IntegerField() p3_C_bonus = models.IntegerField() p3_D_rating = models.IntegerField() p3_D_bonus = models.IntegerField() p3_decision_time = models.StringField() p4_A_rating = models.IntegerField() p4_A_bonus = models.IntegerField() p4_B_rating = models.IntegerField() p4_B_bonus = models.IntegerField() p4_C_rating = models.IntegerField() p4_C_bonus = models.IntegerField() p4_D_rating = models.IntegerField() p4_D_bonus = models.IntegerField() p4_decision_time = models.StringField() #PEQ rating_difficulty = models.StringField(initial=None, choices=[('1', '1 = Not at all difficult.'), ('2', '2 '), ('3', '3 '), ('4', '4 = Somewhat difficult.'), ('5', '5 '), ('6', '6 '), ('7', '7 = Very difficult.')], verbose_name='', widget=widgets.RadioSelectHorizontal()) bonus_difficulty = models.StringField(initial=None, choices=[('1', '1 = Not at all difficult.'), ('2', '2 '), ('3', '3 '), ('4', '4 = Somewhat difficult.'), ('5', '5 '), ('6', '6 '), ('7', '7 = Very difficult.')], verbose_name='', widget=widgets.RadioSelectHorizontal()) employee_task_difficulty = models.StringField(initial=None, choices=[('1', '1 = Not at all difficult.'), ('2', '2 '), ('3', '3 '), ('4', '4 = Somewhat difficult.'), ('5', '5 '), ('6', '6 '), ('7', '7 = Very difficult.')], verbose_name='', widget=widgets.RadioSelectHorizontal()) employee_ability_diffs = models.StringField(initial=None, choices=[('1', '1 = Not at all.'), ('2', '2 '), ('3', '3 '), ('4', '4 = Somewhat.'), ('5', '5 '), ('6', '6 '), ('7', '7 = A great deal.')], verbose_name='', widget=widgets.RadioSelectHorizontal()) helping_expectations = models.StringField(initial=None, choices=[('1', '1 = Much less than expected.'), ('2', '2 '), ('3', '3 '), ('4', '4 = About the same as expected.'), ('5', '5 '), ('6', '6 '), ('7', '7 = Much more than expected.')], verbose_name='', widget=widgets.RadioSelectHorizontal()) obligated_helping = models.StringField(initial=None, choices=[('1', '1 = Not at all.'), ('2', '2 '), ('3', '3 '), ('4', '4 = Somewhat.'), ('5', '5 '), ('6', '6 '), ('7', '7 = A great deal.')], verbose_name='', widget=widgets.RadioSelectHorizontal()) helping_motivation = models.StringField(initial=None, choices=[('1', '1 = Much more because they felt it was the right thing to do.'), ('2', '2 '), ('3', '3 '), ('4', '4 = About equally because they felt it was the right thing to do and beacuse they thought it would improve their performance evaluation.'), ('5', '5 '), ('6', '6 '), ('7', '7 = Much more because they felt it would improve their performance evaluation.')], verbose_name='', widget=widgets.RadioSelectHorizontal()) helping_motivation_bonus = models.StringField(initial=None, choices=[('1', '1 = Much more because they felt it was the right thing to do.'), ('2', '2 '), ('3', '3 '), ('4', '4 = About equally because they felt it was the right thing to do and beacuse they thought it would increase their bonus.'), ('5', '5 '), ('6', '6 '), ('7', '7 = Much more because they felt it would increase their bonus.')], verbose_name='', widget=widgets.RadioSelectHorizontal()) hypothetical_helping = models.StringField(initial=None, choices=[('1', '1 = None at all.'), ('2', '2 '), ('3', '3 '), ('4', '4 = About the same as I spent working to increase my own total output.'), ('5', '5 '), ('6', '6 '), ('7', '7 = The maximum amount of 2 available minutes each period.')], verbose_name='', widget=widgets.RadioSelectHorizontal()) company_expectations = models.StringField(initial=None, choices=[('1', '1 = None at all.'), ('2', '2 '), ('3', '3 '), ('4', '4 = About the same as they spent working to increase their own total output.'), ('5', '5 '), ('6', '6 '), ('7', '7 = The maximum amount of 2 available minutes each period.')], verbose_name='', widget=widgets.RadioSelectHorizontal()) helping_feedback = models.StringField(initial=None, choices=[('1', '1 = Not at all.'), ('2', '2 '), ('3', '3 '), ('4', '4 = Somewhat.'), ('5', '5 '), ('6', '6 '), ('7', '7 = A great deal.')], verbose_name='', widget=widgets.RadioSelectHorizontal()) helping_increased_rating = models.StringField(initial=None, choices=[('1', '1 = Strongly disagree.'), ('2', '2 '), ('3', '3 '), ('4', '4 = Neither agree nor disagree.'), ('5', '5 '), ('6', '6 '), ('7', '7 = Strongly agree.')], verbose_name='', widget=widgets.RadioSelectHorizontal()) rating_output_only = models.StringField(initial=None, choices=[('1', '1 = Strongly disagree.'), ('2', '2 '), ('3', '3 '), ('4', '4 = Neither agree nor disagree.'), ('5', '5 '), ('6', '6 '), ('7', '7 = Strongly agree.')], verbose_name='', widget=widgets.RadioSelectHorizontal()) assume_nobody_helped = models.StringField(initial=None, choices=[('1', '1 = Strongly disagree.'), ('2', '2 '), ('3', '3 '), ('4', '4 = Neither agree nor disagree.'), ('5', '5 '), ('6', '6 '), ('7', '7 = Strongly agree.')], verbose_name='', widget=widgets.RadioSelectHorizontal()) assume_everybody_helped = models.StringField(initial=None, choices=[('1', '1 = Strongly disagree.'), ('2', '2 '), ('3', '3 '), ('4', '4 = Neither agree nor disagree.'), ('5', '5 '), ('6', '6 '), ('7', '7 = Strongly agree.')], verbose_name='', widget=widgets.RadioSelectHorizontal()) helping_feels_good = models.StringField(initial=None, choices=[('1', '1 = Strongly disagree.'), ('2', '2 '), ('3', '3 '), ('4', '4 = Neither agree nor disagree.'), ('5', '5 '), ('6', '6 '), ('7', '7 = Strongly agree.')], verbose_name='', widget=widgets.RadioSelectHorizontal()) helping_own_reward = models.StringField(initial=None, choices=[('1', '1 = Strongly disagree.'), ('2', '2 '), ('3', '3 '), ('4', '4 = Neither agree nor disagree.'), ('5', '5 '), ('6', '6 '), ('7', '7 = Strongly agree.')], verbose_name='', widget=widgets.RadioSelectHorizontal()) rating_explanation = models.LongStringField(verbose_name='') bonus_explanation = models.LongStringField(verbose_name='') helping_output = models.IntegerField(verbose_name='') filler_task_difficulty = models.StringField(initial=None, choices=[('1', '1 = Not at all difficult.'), ('2', '2 '), ('3', '3 '), ('4', '4 = Somewhat difficult.'), ('5', '5 '), ('6', '6 '), ('7', '7 = Very difficult.')], verbose_name='', widget=widgets.RadioSelectHorizontal()) filler_task_enjoyment = models.StringField(initial=None, choices=[('1', '1 = Not at all difficult.'), ('2', '2 '), ('3', '3 '), ('4', '4 = Somewhat difficult.'), ('5', '5 '), ('6', '6 '), ('7', '7 = Very difficult.')], verbose_name='', widget=widgets.RadioSelectHorizontal()) affect_enthusiastic = models.StringField(initial=None, choices=[('1', '1 = Not at all'), ('2', '2 = A little'), ('3', '3 = Moderately'), ('4', '4 = Quite a bit'), ('5', '5 = Extremely')], verbose_name='', widget=widgets.RadioSelectHorizontal()) affect_upset = models.StringField(initial=None, choices=[('1', '1 = Not at all'), ('2', '2 = A little'), ('3', '3 = Moderately'), ('4', '4 = Quite a bit'), ('5', '5 = Extremely')], verbose_name='', widget=widgets.RadioSelectHorizontal()) affect_interested = models.StringField(initial=None, choices=[('1', '1 = Not at all'), ('2', '2 = A little'), ('3', '3 = Moderately'), ('4', '4 = Quite a bit'), ('5', '5 = Extremely')], verbose_name='', widget=widgets.RadioSelectHorizontal()) affect_distressed = models.StringField(initial=None, choices=[('1', '1 = Not at all'), ('2', '2 = A little'), ('3', '3 = Moderately'), ('4', '4 = Quite a bit'), ('5', '5 = Extremely')], verbose_name='', widget=widgets.RadioSelectHorizontal()) affect_determined = models.StringField(initial=None, choices=[('1', '1 = Not at all'), ('2', '2 = A little'), ('3', '3 = Moderately'), ('4', '4 = Quite a bit'), ('5', '5 = Extremely')], verbose_name='', widget=widgets.RadioSelectHorizontal()) affect_nervous = models.StringField(initial=None, choices=[('1', '1 = Not at all'), ('2', '2 = A little'), ('3', '3 = Moderately'), ('4', '4 = Quite a bit'), ('5', '5 = Extremely')], verbose_name='', widget=widgets.RadioSelectHorizontal()) gender = models.StringField(initial=None, choices=[('a', 'a. Male'), ('b', 'b. Female'), ('c', 'c. Non-binary'), ('d', 'd. Other'), ('e', 'e. Prefer not to answer')], verbose_name='', widget=widgets.RadioSelect()) age = models.IntegerField(verbose_name='', min=18, max=110) work_experience = models.IntegerField(verbose_name='', min=0) education = models.CharField(initial=None, choices=[('1', 'Less than high school'), ('2', 'High school graduate'), ('3', 'Some college'), ('4', '2 year degree'), ('5', '4 year degree'), ('6', 'Graduate degree')], verbose_name='') worker_id = models.StringField(initial='e') mturk_dupe = models.IntegerField(initial=0) # FUNCTIONS def creating_session(subsession): session = subsession.session for player in subsession.get_players(): player.condition = session.config['condition'] player.participant.label = 'e' decode_strings_test = [s for s in DecodeStrings.filter() if (s.record_id > 0 and s.record_id < 101)] if not decode_strings_test: DecodeStrings.create(record_id=1, letters='G', numbers='21') DecodeStrings.create(record_id=2, letters='M', numbers='10') DecodeStrings.create(record_id=3, letters='F', numbers='17') DecodeStrings.create(record_id=4, letters='E', numbers='18') DecodeStrings.create(record_id=5, letters='D', numbers='11') DecodeStrings.create(record_id=6, letters='L', numbers='9') DecodeStrings.create(record_id=7, letters='A', numbers='7') DecodeStrings.create(record_id=8, letters='H', numbers='6') DecodeStrings.create(record_id=9, letters='N', numbers='14') DecodeStrings.create(record_id=10, letters='A', numbers='7') DecodeStrings.create(record_id=11, letters='P', numbers='4') DecodeStrings.create(record_id=12, letters='O', numbers='19') DecodeStrings.create(record_id=13, letters='K', numbers='2') DecodeStrings.create(record_id=14, letters='J', numbers='22') DecodeStrings.create(record_id=15, letters='D', numbers='11') DecodeStrings.create(record_id=16, letters='F', numbers='17') DecodeStrings.create(record_id=17, letters='J', numbers='22') DecodeStrings.create(record_id=18, letters='B', numbers='3') DecodeStrings.create(record_id=19, letters='O', numbers='19') DecodeStrings.create(record_id=20, letters='O', numbers='19') DecodeStrings.create(record_id=21, letters='A', numbers='7') DecodeStrings.create(record_id=22, letters='G', numbers='21') DecodeStrings.create(record_id=23, letters='M', numbers='10') DecodeStrings.create(record_id=24, letters='C', numbers='5') DecodeStrings.create(record_id=25, letters='A', numbers='7') DecodeStrings.create(record_id=26, letters='L', numbers='9') DecodeStrings.create(record_id=27, letters='L', numbers='9') DecodeStrings.create(record_id=28, letters='P', numbers='4') DecodeStrings.create(record_id=29, letters='B', numbers='3') DecodeStrings.create(record_id=30, letters='B', numbers='3') DecodeStrings.create(record_id=31, letters='M', numbers='10') DecodeStrings.create(record_id=32, letters='K', numbers='2') DecodeStrings.create(record_id=33, letters='M', numbers='10') DecodeStrings.create(record_id=34, letters='F', numbers='17') DecodeStrings.create(record_id=35, letters='E', numbers='18') DecodeStrings.create(record_id=36, letters='B', numbers='3') DecodeStrings.create(record_id=37, letters='G', numbers='21') DecodeStrings.create(record_id=38, letters='P', numbers='4') DecodeStrings.create(record_id=39, letters='O', numbers='19') DecodeStrings.create(record_id=40, letters='C', numbers='5') DecodeStrings.create(record_id=41, letters='O', numbers='19') DecodeStrings.create(record_id=42, letters='B', numbers='3') DecodeStrings.create(record_id=43, letters='I', numbers='16') DecodeStrings.create(record_id=44, letters='P', numbers='4') DecodeStrings.create(record_id=45, letters='D', numbers='11') DecodeStrings.create(record_id=46, letters='F', numbers='17') DecodeStrings.create(record_id=47, letters='K', numbers='2') DecodeStrings.create(record_id=48, letters='E', numbers='18') DecodeStrings.create(record_id=49, letters='O', numbers='19') DecodeStrings.create(record_id=50, letters='L', numbers='9') DecodeStrings.create(record_id=51, letters='J', numbers='22') DecodeStrings.create(record_id=52, letters='H', numbers='6') DecodeStrings.create(record_id=53, letters='P', numbers='4') DecodeStrings.create(record_id=54, letters='A', numbers='7') DecodeStrings.create(record_id=55, letters='H', numbers='6') DecodeStrings.create(record_id=56, letters='N', numbers='14') DecodeStrings.create(record_id=57, letters='D', numbers='11') DecodeStrings.create(record_id=58, letters='O', numbers='19') DecodeStrings.create(record_id=59, letters='J', numbers='22') DecodeStrings.create(record_id=60, letters='J', numbers='22') DecodeStrings.create(record_id=61, letters='A', numbers='7') DecodeStrings.create(record_id=62, letters='O', numbers='19') DecodeStrings.create(record_id=63, letters='I', numbers='16') DecodeStrings.create(record_id=64, letters='M', numbers='10') DecodeStrings.create(record_id=65, letters='N', numbers='14') DecodeStrings.create(record_id=66, letters='D', numbers='11') DecodeStrings.create(record_id=67, letters='N', numbers='14') DecodeStrings.create(record_id=68, letters='C', numbers='5') DecodeStrings.create(record_id=69, letters='L', numbers='9') DecodeStrings.create(record_id=70, letters='J', numbers='22') DecodeStrings.create(record_id=71, letters='L', numbers='9') DecodeStrings.create(record_id=72, letters='B', numbers='3') DecodeStrings.create(record_id=73, letters='J', numbers='22') DecodeStrings.create(record_id=74, letters='L', numbers='9') DecodeStrings.create(record_id=75, letters='K', numbers='2') DecodeStrings.create(record_id=76, letters='K', numbers='2') DecodeStrings.create(record_id=77, letters='E', numbers='18') DecodeStrings.create(record_id=78, letters='J', numbers='22') DecodeStrings.create(record_id=79, letters='J', numbers='22') DecodeStrings.create(record_id=80, letters='J', numbers='22') DecodeStrings.create(record_id=81, letters='B', numbers='3') DecodeStrings.create(record_id=82, letters='M', numbers='10') DecodeStrings.create(record_id=83, letters='J', numbers='22') DecodeStrings.create(record_id=84, letters='I', numbers='16') DecodeStrings.create(record_id=85, letters='A', numbers='7') DecodeStrings.create(record_id=86, letters='G', numbers='21') DecodeStrings.create(record_id=87, letters='O', numbers='19') DecodeStrings.create(record_id=88, letters='M', numbers='10') DecodeStrings.create(record_id=89, letters='G', numbers='21') DecodeStrings.create(record_id=90, letters='A', numbers='7') DecodeStrings.create(record_id=91, letters='I', numbers='16') DecodeStrings.create(record_id=92, letters='I', numbers='16') DecodeStrings.create(record_id=93, letters='E', numbers='18') DecodeStrings.create(record_id=94, letters='J', numbers='22') DecodeStrings.create(record_id=95, letters='G', numbers='21') DecodeStrings.create(record_id=96, letters='E', numbers='18') DecodeStrings.create(record_id=97, letters='M', numbers='10') DecodeStrings.create(record_id=98, letters='A', numbers='7') DecodeStrings.create(record_id=99, letters='J', numbers='22') DecodeStrings.create(record_id=100, letters='J', numbers='22') DecodeStrings.create(record_id=101, letters='J', numbers='22') # PAGES class IC(Page): form_model = 'player' form_fields = ['informed_consent'] def before_next_page(player, timeout_happened): # See if that worker ID already appears in players, in which case they at least started the experiment if player.participant.label != 'e': worker_match = [w for w in OnlineWorkers.filter() if (w.worker_id == player.participant.label)] if not worker_match: OnlineWorkers.create(worker_id=player.participant.label) player.worker_id = player.participant.label else: player.mturk_dupe = 1 class IC_Decline(Page): @staticmethod def is_displayed(player: Player): return player.informed_consent == "No" class DuplicateWorker(Page): @staticmethod def is_displayed(player: Player): return player.mturk_dupe == 1 class GenInstructions(Page): pass class TaskInstructions(Page): pass class TaskInstructions2(Page): pass class PerformanceEval(Page): pass class Payoffs(Page): pass class KnowledgeCheck(Page): form_model = 'player' @staticmethod def get_form_fields(player): if player.condition == 3 or player.condition == 4: return ['kc1', 'kc2', 'kc3', 'kc4', 'kc5', 'kc6', 'kc7', 'kc8', 'kc9', 'kc10', 'kc11', 'kc12', 'kc13'] else: return ['kc1', 'kc2', 'kc3', 'kc4', 'kc5', 'kc6', 'kc7', 'kc8', 'kc9', 'kc10', 'kc11', 'kc12'] class Practice(Page): form_model = 'player' form_fields = ['practice_num_attempted', 'practice_num_decoded'] @staticmethod def vars_for_template(player): return dict( decode_strings=[s for s in DecodeStrings.filter() if (s.record_id > 0 and s.record_id < 101)] ) class PostPractice(Page): def before_next_page(player, timeout_happened): conn = psycopg2.connect(database="d843cclkr6ovgn", user="uigdr2bmq9irl", password="pc314696db376127251d8f370b2d74d5c429ca12e964769f21ac05c08fc6b7ef6", host="cf9gid2f6uallg.cluster-czrs8kj4isg7.us-east-1.rds.amazonaws.com", port=5432) #conn = sqlite3.connect("db.sqlite3") str_condition = str(player.condition) cursor = conn.cursor() cursor.execute('select * from helping_behavior_manager_employeegroup where ' 'group_id = (select min(group_id) from helping_behavior_manager_employeegroup where is_taken = 0 and condition=' + str_condition + ')') group_data = cursor.fetchone() if group_data is None: player.employee_group_id = -1 cursor.close() conn.commit() conn.close() else: str_group = str(group_data[1]) cursor.execute( 'update helping_behavior_manager_employeegroup set is_taken=1 where condition=' + str_condition + ' and (group_id=' + str_group + ')') player.employee_group_id = group_data[1] player.p1_A_output = group_data[4] player.p1_A_helped = group_data[5] player.p1_A_was_helped = group_data[6] player.p2_A_output = group_data[7] player.p2_A_helped = group_data[8] player.p2_A_was_helped = group_data[9] player.p3_A_output = group_data[10] player.p3_A_helped = group_data[11] player.p3_A_was_helped = group_data[12] player.p4_A_output = group_data[13] player.p4_A_helped = group_data[14] player.p4_A_was_helped = group_data[15] player.p1_B_output = group_data[16] player.p1_B_helped = group_data[17] player.p1_B_was_helped = group_data[18] player.p2_B_output = group_data[19] player.p2_B_helped = group_data[20] player.p2_B_was_helped = group_data[21] player.p3_B_output = group_data[22] player.p3_B_helped = group_data[23] player.p3_B_was_helped = group_data[24] player.p4_B_output = group_data[25] player.p4_B_helped = group_data[26] player.p4_B_was_helped = group_data[27] player.p1_C_output = group_data[28] player.p1_C_helped = group_data[29] player.p1_C_was_helped = group_data[30] player.p2_C_output = group_data[31] player.p2_C_helped = group_data[32] player.p2_C_was_helped = group_data[33] player.p3_C_output = group_data[34] player.p3_C_helped = group_data[35] player.p3_C_was_helped = group_data[36] player.p4_C_output = group_data[37] player.p4_C_helped = group_data[38] player.p4_C_was_helped = group_data[39] player.p1_D_output = group_data[40] player.p1_D_helped = group_data[41] player.p1_D_was_helped = group_data[42] player.p2_D_output = group_data[43] player.p2_D_helped = group_data[44] player.p2_D_was_helped = group_data[45] player.p3_D_output = group_data[46] player.p3_D_helped = group_data[47] player.p3_D_was_helped = group_data[48] player.p4_D_output = group_data[49] player.p4_D_helped = group_data[50] player.p4_D_was_helped = group_data[51] cursor.close() conn.commit() conn.close() class EarlyExit(Page): @staticmethod def is_displayed(player: Player): return player.employee_group_id == -1 class Period1(Page): form_model = 'player' @staticmethod def get_form_fields(player): if player.condition == 3 or player.condition == 4: return ['p1_A_rating', 'p1_A_bonus', 'p1_B_rating', 'p1_B_bonus', 'p1_C_rating', 'p1_C_bonus', 'p1_D_rating', 'p1_D_bonus', 'p1_decision_time'] else: return ['p1_A_rating', 'p1_B_rating', 'p1_C_rating', 'p1_D_rating', 'p1_decision_time'] class Period2(Page): form_model = 'player' @staticmethod def get_form_fields(player): if player.condition == 3 or player.condition == 4: return ['p2_A_rating', 'p2_A_bonus', 'p2_B_rating', 'p2_B_bonus', 'p2_C_rating', 'p2_C_bonus', 'p2_D_rating', 'p2_D_bonus', 'p2_decision_time'] else: return ['p2_A_rating', 'p2_B_rating', 'p2_C_rating', 'p2_D_rating', 'p2_decision_time'] class Period3(Page): form_model = 'player' @staticmethod def get_form_fields(player): if player.condition == 3 or player.condition == 4: return ['p3_A_rating', 'p3_A_bonus', 'p3_B_rating', 'p3_B_bonus', 'p3_C_rating', 'p3_C_bonus', 'p3_D_rating', 'p3_D_bonus', 'p3_decision_time'] else: return ['p3_A_rating', 'p3_B_rating', 'p3_C_rating', 'p3_D_rating', 'p3_decision_time'] class Period4(Page): form_model = 'player' @staticmethod def get_form_fields(player): if player.condition == 3 or player.condition == 4: return ['p4_A_rating', 'p4_A_bonus', 'p4_B_rating', 'p4_B_bonus', 'p4_C_rating', 'p4_C_bonus', 'p4_D_rating', 'p4_D_bonus', 'p4_decision_time'] else: return ['p4_A_rating', 'p4_B_rating', 'p4_C_rating', 'p4_D_rating', 'p4_decision_time'] class Period1Post(Page): pass class Period2Post(Page): pass class Period3Post(Page): pass class Period4Post(Page): pass class PEQ1(Page): form_model = 'player' @staticmethod def get_form_fields(player): if player.condition == 4: return ['rating_difficulty', 'bonus_difficulty','employee_task_difficulty', 'employee_ability_diffs', 'helping_expectations', 'obligated_helping', 'helping_motivation', 'helping_motivation_bonus', 'hypothetical_helping', 'company_expectations', 'helping_feedback'] elif player.condition == 3: return ['rating_difficulty', 'bonus_difficulty','employee_task_difficulty', 'employee_ability_diffs', 'obligated_helping', 'helping_motivation', 'helping_motivation_bonus', 'hypothetical_helping', 'company_expectations', 'helping_feedback'] elif player.condition == 2: return ['rating_difficulty', 'employee_task_difficulty', 'employee_ability_diffs', 'helping_expectations', 'obligated_helping', 'helping_motivation', 'hypothetical_helping', 'company_expectations', 'helping_feedback'] else: return ['rating_difficulty', 'employee_task_difficulty', 'employee_ability_diffs', 'obligated_helping', 'helping_motivation', 'hypothetical_helping', 'company_expectations', 'helping_feedback'] class PEQ2(Page): form_model = 'player' @staticmethod def get_form_fields(player): if player.condition == 4: return ['helping_increased_rating', 'rating_output_only', 'helping_feels_good', 'helping_own_reward', 'rating_explanation', 'bonus_explanation', 'helping_output', 'affect_enthusiastic', 'affect_upset', 'affect_interested', 'affect_distressed', 'affect_determined', 'affect_nervous', 'gender', 'age', 'work_experience', 'education'] elif player.condition == 3: return ['assume_nobody_helped', 'assume_everybody_helped', 'helping_feels_good', 'helping_own_reward', 'rating_explanation', 'bonus_explanation', 'affect_enthusiastic', 'affect_upset', 'affect_interested', 'affect_distressed', 'affect_determined', 'affect_nervous', 'gender', 'age', 'work_experience', 'education'] elif player.condition == 2: return ['helping_increased_rating', 'rating_output_only', 'helping_feels_good', 'helping_own_reward', 'rating_explanation', 'helping_output', 'affect_enthusiastic', 'affect_upset', 'affect_interested', 'affect_distressed', 'affect_determined', 'affect_nervous', 'gender', 'age', 'work_experience', 'education'] else: return ['assume_nobody_helped', 'assume_everybody_helped', 'helping_feels_good', 'helping_own_reward', 'rating_explanation', 'affect_enthusiastic', 'affect_upset', 'affect_interested', 'affect_distressed', 'affect_determined', 'affect_nervous', 'gender', 'age', 'work_experience', 'education'] class ExitResults(Page): @staticmethod def vars_for_template(player): decoding_comp = math.ceil((player.practice_num_decoded)/25*100)/100 total_comp = decoding_comp + 10.00 return dict( decoding_compensation='{0:.2f}'.format(decoding_comp), total_compensation='{0:.2f}'.format(total_comp) ) page_sequence = \ [ IC, IC_Decline, DuplicateWorker, GenInstructions, TaskInstructions, TaskInstructions2, PerformanceEval, Payoffs, KnowledgeCheck, Practice, PostPractice, EarlyExit, Period1, Period1Post, Period2, Period2Post, Period3, Period3Post, Period4, Period4Post, PEQ1, PEQ2, ExitResults ]