from otree.api import * import time import random import math from decimal import Decimal import psycopg2 import sqlite3 import math class C(BaseConstants): NAME_IN_URL = 'lev_emp_s2' PLAYERS_PER_GROUP = 3 NUM_ROUNDS = 1 class Group(BaseGroup): pass class Subsession(BaseSubsession): pass class Player(BasePlayer): condition = models.IntegerField() e_role = models.StringField() kc2_1 = models.StringField(initial=None, choices=['True', 'False'], verbose_name='', widget=widgets.RadioSelect()) kc2_2 = models.StringField(initial=None, choices=['True', 'False'], verbose_name='', widget=widgets.RadioSelect()) kc2_3 = models.StringField(initial=None, choices=['True', 'False'], verbose_name='', widget=widgets.RadioSelect()) kc2_4 = models.StringField(initial=None, choices=['True', 'False'], verbose_name='', widget=widgets.RadioSelect()) kc2_5 = models.StringField(initial=None, choices=['True', 'False'], verbose_name='', widget=widgets.RadioSelect()) manager_id = models.IntegerField() employee_a_id = models.IntegerField() employee_b_id = models.IntegerField() owner_id = models.IntegerField() been_grouped = models.IntegerField(default=0) control_decision = models.IntegerField(default=9) control_in_place = models.IntegerField(default=9) resources_1 = models.IntegerField() partner_resources_1 = models.IntegerField() period_1_revenue = models.IntegerField() period_1_cost = models.IntegerField() period_1_audit = models.IntegerField() period_1_bonus = models.IntegerField(default=0) period_1_points = models.IntegerField() partner_period_1_points = models.IntegerField() resources_2 = models.IntegerField() partner_resources_2 = models.IntegerField() period_2_revenue = models.IntegerField() period_2_cost = models.IntegerField() period_2_audit = models.IntegerField() period_2_bonus = models.IntegerField(default=0) period_2_points = models.IntegerField() partner_period_2_points = models.IntegerField() resources_3 = models.IntegerField() partner_resources_3 = models.IntegerField() period_3_revenue = models.IntegerField() period_3_cost = models.IntegerField() period_3_audit = models.IntegerField() period_3_bonus = models.IntegerField(default=0) period_3_points = models.IntegerField() partner_period_3_points = models.IntegerField() resources_4 = models.IntegerField() partner_resources_4 = models.IntegerField() period_4_revenue = models.IntegerField() period_4_cost = models.IntegerField() period_4_audit = models.IntegerField() period_4_bonus = models.IntegerField(default=0) period_4_points = models.IntegerField() partner_period_4_points = models.IntegerField() resources_5 = models.IntegerField() partner_resources_5 = models.IntegerField() period_5_revenue = models.IntegerField() period_5_cost = models.IntegerField() period_5_audit = models.IntegerField() period_5_bonus = models.IntegerField(default=0) period_5_points = models.IntegerField() partner_period_5_points = models.IntegerField() resources_6 = models.IntegerField() partner_resources_6 = models.IntegerField() period_6_revenue = models.IntegerField() period_6_cost = models.IntegerField() period_6_audit = models.IntegerField() period_6_bonus = models.IntegerField(default=0) period_6_points = models.IntegerField() partner_period_6_points = models.IntegerField() total_s1_points = models.IntegerField() #Trust games #Sender points_sent_proj1 = models.IntegerField() points_kept_proj1 = models.IntegerField() profit_proj1 = models.IntegerField() points_ret_from_proj1 = models.IntegerField() total_points_proj1 = models.IntegerField() points_sent_proj2 = models.IntegerField() points_kept_proj2 = models.IntegerField() profit_proj2 = models.IntegerField() points_ret_from_proj2 = models.IntegerField() total_points_proj2 = models.IntegerField() #Receiver; For managers, partner will be Emp A and mgr will be Emp B points_rec_from_partner = models.IntegerField() profit_from_partner = models.IntegerField() points_ret_to_partner = models.IntegerField() total_points_from_partner = models.IntegerField() points_rec_from_mgr = models.IntegerField() profit_from_mgr = models.IntegerField() points_ret_to_mgr = models.IntegerField() total_points_from_mgr = models.IntegerField() total_s2_points = models.IntegerField() total_points = models.IntegerField() total_compensation = models.StringField() #"Pre" PEQ expected_cooperation = models.StringField(initial=None, choices=[('1', '1 = I do not expect any Employees to ever allocate high ' 'resources to their joint project.'), ('2', '2 '), ('3', '3 '), ('4', '4 = I expect at least some Employees to allocate high' 'resources to their joint project at least some of the time.'), ('5', '5 '), ('6', '6 '), ('7', '7 = I expect all Employees to allocate high resources to' 'their joint project all of the time.')], verbose_name='', widget=widgets.RadioSelectHorizontal()) inv_expected_cooperation = models.StringField(initial=None, choices=[('1', '1 = I would not expect any Employees to ever allocate high ' 'resources to their joint project.'), ('2', '2 '), ('3', '3 '), ('4', '4 = I would expect at least some Employees to allocate high' 'resources to their joint project at least some of the time.'), ('5', '5 '), ('6', '6 '), ('7', '7 = I would expect all Employees to allocate high resources to' 'their joint project all of the time.')], verbose_name='', widget=widgets.RadioSelectHorizontal()) inv_expected_cooperation_hyp = models.StringField(initial=None, choices=[('1', '1 = I would not expect any Employees to ever allocate high ' 'resources to their joint project.'), ('2', '2 '), ('3', '3 '), ('4', '4 = I would expect at least some Employees to allocate high' 'resources to their joint project at least some of the time.'), ('5', '5 '), ('6', '6 '), ('7', '7 = I would expect all Employees to allocate high resources to' 'their joint project all of the time.')], verbose_name='', widget=widgets.RadioSelectHorizontal()) control_likelihood = models.StringField(initial=None, choices=[('1', '1 = Definitely would not.'), ('2', '2 '), ('3', '3 '), ('4', '4 = Unsure.'), ('5', '5 '), ('6', '6 '), ('7', '7 = Definitely would.')], verbose_name='', widget=widgets.RadioSelectHorizontal()) #PEQ - Employees manager_trusts_me = 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()) manager_trusts_B = 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()) firm_trusts_me = 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()) firm_trusts_all_emps = 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()) trust_manager = 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()) trust_partner = 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()) trust_firm = 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()) exit_team = 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()) teammate_partner = 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()) teammate_manager = 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()) teammate_firm = 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()) partner_cares = models.StringField(initial=None, choices=[('1', 'My well being'), ('2', 'Their own interests'), ('3', 'Both equally')], verbose_name='', widget=widgets.RadioSelect()) partner_cares_magnitude = models.StringField(initial=None, choices=[('1', '1 = Slightly more'), ('2', '2 = Moderately more'), ('3', '3 = Significantly more')], verbose_name='', widget=widgets.RadioSelectHorizontal()) manager_cares = models.StringField(initial=None, choices=[('1', 'My well being'), ('2', 'Their own interests'), ('3', 'Both equally')], verbose_name='', widget=widgets.RadioSelect()) manager_cares_magnitude = models.StringField(initial=None, choices=[('1', '1 = Slightly more'), ('2', '2 = Moderately more'), ('3', '3 = Significantly more')], verbose_name='', widget=widgets.RadioSelectHorizontal()) self_control_resp = models.StringField(initial=None, choices=[('1', '1 = Not at all responsible'), ('2', '2 '), ('3', '3 '), ('4', '4 = Somewhat responsible.'), ('5', '5 '), ('6', '6 '), ('7', '7 = Completely responsible.')], verbose_name='', widget=widgets.RadioSelectHorizontal()) EmpB_control_resp = models.StringField(initial=None, choices=[('1', '1 = Not at all responsible'), ('2', '2 '), ('3', '3 '), ('4', '4 = Somewhat responsible.'), ('5', '5 '), ('6', '6 '), ('7', '7 = Completely responsible.')], verbose_name='', widget=widgets.RadioSelectHorizontal()) mgr_control_resp = models.StringField(initial=None, choices=[('1', '1 = Not at all responsible'), ('2', '2 '), ('3', '3 '), ('4', '4 = Somewhat responsible.'), ('5', '5 '), ('6', '6 '), ('7', '7 = Completely responsible.')], verbose_name='', widget=widgets.RadioSelectHorizontal()) firm_control_resp = models.StringField(initial=None, choices=[('1', '1 = Not at all responsible'), ('2', '2 '), ('3', '3 '), ('4', '4 = Somewhat responsible.'), ('5', '5 '), ('6', '6 '), ('7', '7 = Completely responsible.')], verbose_name='', widget=widgets.RadioSelectHorizontal()) perceived_autonomy = 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()) manager_intrusion = 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()) firm_intrusion = 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()) coop_right = 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()) coop_partner_want = 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()) coop_mgr_want = 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()) coop_firm_want = 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()) emp_coop_payoff = 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()) manager_fairness = 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()) firm_fairness = 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()) control_fairness = 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()) control_reaction = models.StringField(verbose_name='') control_motivation = models.StringField(verbose_name='') control_reason_1 = 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()) control_reason_2 = 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()) control_reason_3 = 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()) control_reason_4 = 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()) control_reason_5 = 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()) control_reason_6 = 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()) control_reason_7 = 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()) control_reason_8 = 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()) control_reason_9 = 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()) ############################################################################################################## # PEQ - for managers emp_A_trust_me = 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()) emp_B_trust_me = 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()) firm_trust_me = 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()) firm_trusts_emps = 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()) trust_emp_A = 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()) trust_emp_B = 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()) m_trust_firm = 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()) m_exit_team = 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()) m_teammate_emp_A = 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()) m_teammate_emp_B = 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()) m_teammate_firm = 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()) m_self_control_resp = models.StringField(initial=None, choices=[('1', '1 = Not at all responsible'), ('2', '2 '), ('3', '3 '), ('4', '4 = Somewhat responsible.'), ('5', '5 '), ('6', '6 '), ('7', '7 = Completely responsible.')], verbose_name='', widget=widgets.RadioSelectHorizontal()) m_emps_control_resp = models.StringField(initial=None, choices=[('1', '1 = Not at all responsible'), ('2', '2 '), ('3', '3 '), ('4', '4 = Somewhat responsible.'), ('5', '5 '), ('6', '6 '), ('7', '7 = Completely responsible.')], verbose_name='', widget=widgets.RadioSelectHorizontal()) m_firm_control_resp = models.StringField(initial=None, choices=[('1', '1 = Not at all responsible'), ('2', '2 '), ('3', '3 '), ('4', '4 = Somewhat responsible.'), ('5', '5 '), ('6', '6 '), ('7', '7 = Completely responsible.')], verbose_name='', widget=widgets.RadioSelectHorizontal()) emp_autonomy_A = 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()) emp_autonomy_B = 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()) emps_coop_payoffs = 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()) m_control_fairness = 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()) hypo_want_control = 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()) m_control_reason_1 = 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()) m_control_reason_2 = 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()) m_control_reason_3 = 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()) m_control_reason_4 = 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()) m_control_reason_5 = 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()) m_control_reason_6 = 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()) m_control_reason_7 = 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()) m_control_reason_8 = 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()) m_control_reason_9 = 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()) m_control_reason_10 = 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()) perceived_control_motivation = models.StringField(verbose_name='') # PEQ - Common for propensity to trust and demographics outside_employment = models.StringField(initial=None, choices=[('1', 'Yes, full-time'), ('2', 'Yes, part-time'), ('3', 'No')], verbose_name='', widget=widgets.RadioSelect()) real_mgr_relationship = 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()) real_org_identification = 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()) prop_trust_1 = 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()) prop_trust_2 = 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()) prop_trust_3 = 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()) prop_trust_4 = 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()) prop_trust_5 = 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()) prop_trust_6 = 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()) prop_trust_7 = 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()) prop_trust_8 = 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()) 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='') class FirmAssignment(ExtraModel): director_id = models.IntegerField() group_id = models.IntegerField() control_imposed = models.IntegerField() # FUNCTIONS def creating_session(subsession): session = subsession.session for player in subsession.get_players(): player.condition = session.config['condition'] player.participant.label = 'e' # PAGES def group_by_arrival_time_method(subsession, waiting_players): # Managers and employees mgr_players = [p for p in waiting_players if p.participant.e_role == "Manager"] emp_players = [p for p in waiting_players if p.participant.e_role == "Employee"] # Employees by control choice, since this drives grouping in the employee-imposed condition emp_control_players = [p for p in waiting_players if p.participant.e_role == "Employee" and p.participant.control_decision == 1] emp_no_control_players = [p for p in waiting_players if p.participant.e_role == "Employee" and p.participant.control_decision == 0] if subsession.session.config['condition'] == 3: if len(emp_control_players) >= 2 and len(mgr_players) >= 1: return [emp_control_players[0], emp_control_players[1], mgr_players[0]] if len(emp_no_control_players) >= 2 and len(mgr_players) >= 1: return [emp_no_control_players[0], emp_no_control_players[1], mgr_players[0]] else: if len(emp_players) >= 2 and len(mgr_players) >= 1: return [emp_players[0], emp_players[1], mgr_players[0]] class GroupWait(WaitPage): #Make sure using forward slash in template name! #template_name = 'helping_behavior_employee_task/CWaitPage2.html' body_text = "Please wait briefly while others arrive. Please keep this page active while waiting." title_text = "" group_by_arrival_time = True @staticmethod def after_all_players_arrive(group: Group): p1 = group.get_player_by_id(1) p2 = group.get_player_by_id(2) p3 = group.get_player_by_id(3) p1.been_grouped = 1 #Indicate the group has been formed, to accommodate the check below for directors p2.been_grouped = 1 p3.been_grouped = 1 p1.e_role = p1.participant.e_role p2.e_role = p2.participant.e_role p3.e_role = p3.participant.e_role p1.control_decision = p1.participant.control_decision p2.control_decision = p2.participant.control_decision p3.control_decision = p3.participant.control_decision if p1.condition == 2: p1.control_in_place = p3.control_decision p2.control_in_place = p3.control_decision p3.control_in_place = p3.control_decision elif p1.condition == 3: p1.control_in_place = p1.control_decision p2.control_in_place = p2.control_decision p3.control_in_place = p2.control_decision # Manager needs to know control in place from employees.. # Don't need to do much logic for matching for division directors. Just make first ten (?) groups # No Control so that after accounting for some who end up not finishing, what's left can all # be used for the no control division director(s). For the directors who chose the control, just do # manual assignment of 5+ later. elif p1.condition == 1: # Have this control variable set to 9 for the master where it depends on real participant answers. if p1.subsession.session.config['control'] == 9: 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_group_id = str(p1.group_id) cursor = conn.cursor() # Default for control_in_place = 9. So, check to see how many groups have been grouped and have had the # control in place set to 0. Want 10 to allow for some groups not finishing. cursor.execute( 'select count(distinct group_id) as num_groups from' ' control_levels_employee_s2.player where been_grouped = 1 and control_in_place = 0') this_group = cursor.fetchone() if this_group[1] < 10: p1.control_in_place = 0 p2.control_in_place = 0 p3.control_in_place = 0 else: p1.control_in_place = 1 p2.control_in_place = 1 p3.control_in_place = 1 cursor.close() conn.commit() conn.close() else: p1.control_in_place = p1.subsession.session.config['control'] p2.control_in_place = p1.subsession.session.config['control'] p3.control_in_place = p1.subsession.session.config['control'] class MgrInterim(Page): form_model = 'player' @staticmethod def get_form_fields(player): if player.condition == 1 or player.condition == 3: return ['expected_cooperation', 'inv_expected_cooperation_hyp', 'control_likelihood'] else: return ['expected_cooperation', 'inv_expected_cooperation'] @staticmethod def is_displayed(player): return player.e_role == "Manager" class Resource1(Page): form_model = 'player' form_fields = ['resources_1'] @staticmethod def is_displayed(player): return player.e_role == "Employee" class Resource2(Page): form_model = 'player' form_fields = ['resources_2'] @staticmethod def is_displayed(player): return player.e_role == "Employee" class Resource3(Page): form_model = 'player' form_fields = ['resources_3'] @staticmethod def is_displayed(player): return player.e_role == "Employee" class Resource4(Page): form_model = 'player' form_fields = ['resources_4'] @staticmethod def is_displayed(player): return player.e_role == "Employee" class Resource5(Page): form_model = 'player' form_fields = ['resources_5'] @staticmethod def is_displayed(player): return player.e_role == "Employee" class Resource6(Page): form_model = 'player' form_fields = ['resources_6'] @staticmethod def is_displayed(player): return player.e_role == "Employee" class DecisionWait1(WaitPage): #Make sure using forward slash in template name! #template_name = 'helping_behavior_employee_task/CWaitPage2.html' body_text = "Please wait briefly while others arrive. Please keep this page active while waiting." title_text = "" @staticmethod def after_all_players_arrive(group: Group): p1 = group.get_player_by_id(1) p2 = group.get_player_by_id(2) p3 = group.get_player_by_id(3) resources = p1.resources_1 + p2.resources_1 totalrev = 0 rev = 0 control = p1.control_in_place draw = random.randint(1, 100) if draw < 21: audit = 0 else: audit = 1 # Don't have to check for control; this just won't get used if it's not in place p1.period_1_audit = audit p2.period_1_audit = audit p3.period_1_audit = audit # Determine project revenue, split three ways between employees and mgr if resources == 2: totalrev = 75 rev = int(75 / 3) elif resources == 1: totalrev = 45 rev = int(45 / 3) else: totalrev = 15 rev = int(15 / 3) p1.period_1_revenue = rev p2.period_1_revenue = rev p3.period_1_revenue = totalrev # Determine / set costs for employees if p1.resources_1 == 1: p1.period_1_cost = 15 else: p1.period_1_cost = 0 if p2.resources_1 == 1: p2.period_1_cost = 15 else: p2.period_1_cost = 0 # If the control is in place, do audit stuff if control == 1: if audit == 1: if p1.resources_1 == 1: p1.period_1_bonus = 15 if p2.resources_1 == 1: p2.period_1_bonus = 15 # Total points for the period for everybody p1.period_1_points = p1.period_1_revenue - p1.period_1_cost + p1.period_1_bonus p2.period_1_points = p2.period_1_revenue - p2.period_1_cost + p2.period_1_bonus p3.period_1_points = rev + 25 p1.partner_period_1_points = p2.period_1_points p2.partner_period_1_points = p1.period_1_points # Update partner resources for feedback page; Mgr will store this in employee/partner fields p1.partner_resources_1 = p2.resources_1 p2.partner_resources_1 = p1.resources_1 p3.resources_1 = p1.resources_1 p3.partner_resources_1 = p2.resources_1 class DecisionWait2(WaitPage): #Make sure using forward slash in template name! #template_name = 'helping_behavior_employee_task/CWaitPage2.html' body_text = "Please wait briefly while others arrive. Please keep this page active while waiting." title_text = "" @staticmethod def after_all_players_arrive(group: Group): p1 = group.get_player_by_id(1) p2 = group.get_player_by_id(2) p3 = group.get_player_by_id(3) resources = p1.resources_2 + p2.resources_2 totalrev = 0 rev = 0 control = p1.control_in_place draw = random.randint(1, 100) if draw < 21: audit = 0 else: audit = 1 # Don't have to check for control; this just won't get used if it's not in place p1.period_2_audit = audit p2.period_2_audit = audit p3.period_2_audit = audit # Determine project revenue, split three ways between employees and mgr if resources == 2: totalrev = 75 rev = int(75 / 3) elif resources == 1: totalrev = 45 rev = int(45 / 3) else: totalrev = 15 rev = int(15 / 3) p1.period_2_revenue = rev p2.period_2_revenue = rev p3.period_2_revenue = totalrev # Determine / set costs for employees if p1.resources_2 == 1: p1.period_2_cost = 15 else: p1.period_2_cost = 0 if p2.resources_2 == 1: p2.period_2_cost = 15 else: p2.period_2_cost = 0 # If the control is in place, do audit stuff if control == 1: if audit == 1: if p1.resources_2 == 1: p1.period_2_bonus = 15 if p2.resources_2 == 1: p2.period_2_bonus = 15 # Total points for the period for everybody p1.period_2_points = p1.period_2_revenue - p1.period_2_cost + p1.period_2_bonus p2.period_2_points = p2.period_2_revenue - p2.period_2_cost + p2.period_2_bonus p3.period_2_points = rev + 25 p1.partner_period_2_points = p2.period_2_points p2.partner_period_2_points = p1.period_2_points # Update partner resources for feedback page; Mgr will store this in employee/partner fields p1.partner_resources_2 = p2.resources_2 p2.partner_resources_2 = p1.resources_2 p3.resources_2 = p1.resources_2 p3.partner_resources_2 = p2.resources_2 class DecisionWait3(WaitPage): #Make sure using forward slash in template name! #template_name = 'helping_behavior_employee_task/CWaitPage2.html' body_text = "Please wait briefly while others arrive. Please keep this page active while waiting." title_text = "" @staticmethod def after_all_players_arrive(group: Group): p1 = group.get_player_by_id(1) p2 = group.get_player_by_id(2) p3 = group.get_player_by_id(3) resources = p1.resources_3 + p2.resources_3 totalrev = 0 rev = 0 control = p1.control_in_place draw = random.randint(1, 100) if draw < 21: audit = 0 else: audit = 1 # Don't have to check for control; this just won't get used if it's not in place p1.period_3_audit = audit p2.period_3_audit = audit p3.period_3_audit = audit # Determine project revenue, split three ways between employees and mgr if resources == 2: totalrev = 75 rev = int(75 / 3) elif resources == 1: totalrev = 45 rev = int(45 / 3) else: totalrev = 15 rev = int(15 / 3) p1.period_3_revenue = rev p2.period_3_revenue = rev p3.period_3_revenue = totalrev # Determine / set costs for employees if p1.resources_3 == 1: p1.period_3_cost = 15 else: p1.period_3_cost = 0 if p2.resources_3 == 1: p2.period_3_cost = 15 else: p2.period_3_cost = 0 # If the control is in place, do audit stuff if control == 1: if audit == 1: if p1.resources_3 == 1: p1.period_3_bonus = 15 if p2.resources_3 == 1: p2.period_3_bonus = 15 # Total points for the period for everybody p1.period_3_points = p1.period_3_revenue - p1.period_3_cost + p1.period_3_bonus p2.period_3_points = p2.period_3_revenue - p2.period_3_cost + p2.period_3_bonus p3.period_3_points = rev + 25 p1.partner_period_3_points = p2.period_3_points p2.partner_period_3_points = p1.period_3_points # Update partner resources for feedback page; Mgr will store this in employee/partner fields p1.partner_resources_3 = p2.resources_3 p2.partner_resources_3 = p1.resources_3 p3.resources_3 = p1.resources_3 p3.partner_resources_3 = p2.resources_3 class DecisionWait4(WaitPage): #Make sure using forward slash in template name! #template_name = 'helping_behavior_employee_task/CWaitPage2.html' body_text = "Please wait briefly while others arrive. Please keep this page active while waiting." title_text = "" @staticmethod def after_all_players_arrive(group: Group): p1 = group.get_player_by_id(1) p2 = group.get_player_by_id(2) p3 = group.get_player_by_id(3) resources = p1.resources_4 + p2.resources_4 totalrev = 0 rev = 0 control = p1.control_in_place draw = random.randint(1, 100) if draw < 21: audit = 0 else: audit = 1 # Don't have to check for control; this just won't get used if it's not in place p1.period_4_audit = audit p2.period_4_audit = audit p3.period_4_audit = audit # Determine project revenue, split three ways between employees and mgr if resources == 2: totalrev = 75 rev = int(75 / 3) elif resources == 1: totalrev = 45 rev = int(45 / 3) else: totalrev = 15 rev = int(15 / 3) p1.period_4_revenue = rev p2.period_4_revenue = rev p3.period_4_revenue = totalrev # Determine / set costs for employees if p1.resources_4 == 1: p1.period_4_cost = 15 else: p1.period_4_cost = 0 if p2.resources_4 == 1: p2.period_4_cost = 15 else: p2.period_4_cost = 0 # If the control is in place, do audit stuff if control == 1: if audit == 1: if p1.resources_4 == 1: p1.period_4_bonus = 15 if p2.resources_4 == 1: p2.period_4_bonus = 15 # Total points for the period for everybody p1.period_4_points = p1.period_4_revenue - p1.period_4_cost + p1.period_4_bonus p2.period_4_points = p2.period_4_revenue - p2.period_4_cost + p2.period_4_bonus p3.period_4_points = rev + 25 p1.partner_period_4_points = p2.period_4_points p2.partner_period_4_points = p1.period_4_points # Update partner resources for feedback page; Mgr will store this in employee/partner fields p1.partner_resources_4 = p2.resources_4 p2.partner_resources_4 = p1.resources_4 p3.resources_4 = p1.resources_4 p3.partner_resources_4 = p2.resources_4 class DecisionWait5(WaitPage): #Make sure using forward slash in template name! #template_name = 'helping_behavior_employee_task/CWaitPage2.html' body_text = "Please wait briefly while others arrive. Please keep this page active while waiting." title_text = "" @staticmethod def after_all_players_arrive(group: Group): p1 = group.get_player_by_id(1) p2 = group.get_player_by_id(2) p3 = group.get_player_by_id(3) resources = p1.resources_5 + p2.resources_5 totalrev = 0 rev = 0 control = p1.control_in_place draw = random.randint(1, 100) if draw < 21: audit = 0 else: audit = 1 # Don't have to check for control; this just won't get used if it's not in place p1.period_5_audit = audit p2.period_5_audit = audit p3.period_5_audit = audit # Determine project revenue, split three ways between employees and mgr if resources == 2: totalrev = 75 rev = int(75 / 3) elif resources == 1: totalrev = 45 rev = int(45 / 3) else: totalrev = 15 rev = int(15 / 3) p1.period_5_revenue = rev p2.period_5_revenue = rev p3.period_5_revenue = totalrev # Determine / set costs for employees if p1.resources_5 == 1: p1.period_5_cost = 15 else: p1.period_5_cost = 0 if p2.resources_5 == 1: p2.period_5_cost = 15 else: p2.period_5_cost = 0 # If the control is in place, do audit stuff if control == 1: if audit == 1: if p1.resources_5 == 1: p1.period_5_bonus = 15 if p2.resources_5 == 1: p2.period_5_bonus = 15 # Total points for the period for everybody p1.period_5_points = p1.period_5_revenue - p1.period_5_cost + p1.period_5_bonus p2.period_5_points = p2.period_5_revenue - p2.period_5_cost + p2.period_5_bonus p3.period_5_points = rev + 25 p1.partner_period_5_points = p2.period_5_points p2.partner_period_5_points = p1.period_5_points # Update partner resources for feedback page; Mgr will store this in employee/partner fields p1.partner_resources_5 = p2.resources_5 p2.partner_resources_5 = p1.resources_5 p3.resources_5 = p1.resources_5 p3.partner_resources_5 = p2.resources_5 class DecisionWait6(WaitPage): #Make sure using forward slash in template name! #template_name = 'helping_behavior_employee_task/CWaitPage2.html' body_text = "Please wait briefly while others arrive. Please keep this page active while waiting." title_text = "" @staticmethod def after_all_players_arrive(group: Group): p1 = group.get_player_by_id(1) p2 = group.get_player_by_id(2) p3 = group.get_player_by_id(3) resources = p1.resources_6 + p2.resources_6 totalrev = 0 rev = 0 control = p1.control_in_place draw = random.randint(1, 100) if draw < 21: audit = 0 else: audit = 1 # Don't have to check for control; this just won't get used if it's not in place p1.period_6_audit = audit p2.period_6_audit = audit p3.period_6_audit = audit # Determine project revenue, split three ways between employees and mgr if resources == 2: totalrev = 75 rev = int(75 / 3) elif resources == 1: totalrev = 45 rev = int(45 / 3) else: totalrev = 15 rev = int(15 / 3) p1.period_6_revenue = rev p2.period_6_revenue = rev p3.period_6_revenue = totalrev # Determine / set costs for employees if p1.resources_6 == 1: p1.period_6_cost = 15 else: p1.period_6_cost = 0 if p2.resources_6 == 1: p2.period_6_cost = 15 else: p2.period_6_cost = 0 # If the control is in place, do audit stuff if control == 1: if audit == 1: if p1.resources_6 == 1: p1.period_6_bonus = 15 if p2.resources_6 == 1: p2.period_6_bonus = 15 # Total points for the period for everybody p1.period_6_points = p1.period_6_revenue - p1.period_6_cost + p1.period_6_bonus p2.period_6_points = p2.period_6_revenue - p2.period_6_cost + p2.period_6_bonus p3.period_6_points = rev + 25 p1.partner_period_6_points = p2.period_6_points p2.partner_period_6_points = p1.period_6_points # Total stage one points now too... p1.total_s1_points = (p1.period_1_points + p1.period_2_points + p1.period_3_points + p1.period_4_points + p1.period_5_points + p1.period_6_points) p2.total_s1_points = (p2.period_1_points + p2.period_2_points + p2.period_3_points + p2.period_4_points + p2.period_5_points + p2.period_6_points) p3.total_s1_points = (p3.period_1_points + p3.period_2_points + p3.period_3_points + p3.period_4_points + p3.period_5_points + p3.period_6_points) # Update partner resources for feedback page; Mgr will store this in employee/partner fields p1.partner_resources_6 = p2.resources_6 p2.partner_resources_6 = p1.resources_6 p3.resources_6 = p1.resources_6 p3.partner_resources_6 = p2.resources_6 class Results1(Page): pass class Results2(Page): pass class Results3(Page): pass class Results4(Page): pass class Results5(Page): pass class Results6(Page): pass class TaskInstructions3(Page): form_model = 'player' form_fields = ['kc2_1', 'kc2_2', 'kc2_3', 'kc2_4', 'kc2_5'] class ProjectDecision(Page): form_model = 'player' @staticmethod def get_form_fields(player): if player.e_role == "Manager": return ['points_sent_proj1', 'points_sent_proj2'] else: return ['points_sent_proj1'] @staticmethod def before_next_page(player, timeout_happened): if player.e_role == "Manager": player.points_kept_proj1 = 100 - player.points_sent_proj1 player.profit_proj1 = player.points_sent_proj1 * 3 player.points_kept_proj2 = 100 - player.points_sent_proj2 player.profit_proj2 = player.points_sent_proj2 * 3 else: player.points_kept_proj1 = 100 - player.points_sent_proj1 player.profit_proj1 = player.points_sent_proj1 * 3 class ProjectDecision2(Page): form_model = 'player' form_fields = ['points_sent_proj2'] @staticmethod def is_displayed(player): return player.e_role == "Employee" @staticmethod def before_next_page(player, timeout_happened): player.points_kept_proj2 = 100 - player.points_sent_proj2 player.profit_proj2 = player.points_sent_proj2 * 3 class DecisionWaitT(WaitPage): #Make sure using forward slash in template name! #template_name = 'helping_behavior_employee_task/CWaitPage2.html' body_text = "Please wait briefly while others arrive. Please keep this page active while waiting." title_text = "" @staticmethod def after_all_players_arrive(group): p1 = group.get_player_by_id(1) p2 = group.get_player_by_id(2) p3 = group.get_player_by_id(3) #Manager p1.points_rec_from_partner = p2.points_sent_proj1 p1.profit_from_partner = p2.points_sent_proj1 * 3 p1.points_rec_from_mgr = p3.points_sent_proj1 p1.profit_from_mgr = p3.points_sent_proj1 * 3 p2.points_rec_from_partner = p1.points_sent_proj1 p2.profit_from_partner = p1.points_sent_proj1 * 3 p2.points_rec_from_mgr = p3.points_sent_proj2 p2.profit_from_mgr = p3.points_sent_proj2 * 3 p3.points_rec_from_partner = p1.points_sent_proj2 p3.profit_from_partner = p1.points_sent_proj2 * 3 p3.points_rec_from_mgr = p2.points_sent_proj2 p3.profit_from_mgr = p2.points_sent_proj2 * 3 class ProjectDecision3(Page): form_model = 'player' form_fields = ['points_ret_to_partner', 'points_ret_to_mgr'] class DecisionWaitT2(WaitPage): #Make sure using forward slash in template name! #template_name = 'helping_behavior_employee_task/CWaitPage2.html' body_text = "Please wait briefly while others arrive. Please keep this page active while waiting." title_text = "" @staticmethod def after_all_players_arrive(group): p1 = group.get_player_by_id(1) p2 = group.get_player_by_id(2) p3 = group.get_player_by_id(3) #Manager p1.total_points_from_partner = p1.profit_from_partner - p1.points_ret_to_partner p1.total_points_from_mgr = p1.profit_from_mgr - p1.points_ret_to_mgr p2.total_points_from_partner = p2.profit_from_partner - p2.points_ret_to_partner p2.total_points_from_mgr = p2.profit_from_mgr - p2.points_ret_to_mgr p3.total_points_from_partner = p3.profit_from_partner - p3.points_ret_to_partner p3.total_points_from_mgr = p3.profit_from_mgr - p3.points_ret_to_mgr p1.points_ret_from_proj1 = p2.points_ret_to_partner p1.points_ret_from_proj2 = p3.points_ret_to_partner p1.total_points_proj1 = p1.points_kept_proj1 + p1.points_ret_from_proj1 p1.total_points_proj2 = p1.points_kept_proj2 + p1.points_ret_from_proj2 p2.points_ret_from_proj1 = p1.points_ret_to_partner p2.points_ret_from_proj2 = p3.points_ret_to_partner p2.total_points_proj1 = p2.points_kept_proj1 + p2.points_ret_from_proj1 p2.total_points_proj2 = p2.points_kept_proj2 + p2.points_ret_from_proj2 p3.points_ret_from_proj1 = p1.points_ret_to_mgr p3.points_ret_from_proj2 = p2.points_ret_to_mgr p3.total_points_proj1 = p3.points_kept_proj1 + p3.points_ret_from_proj1 p3.total_points_proj2 = p3.points_kept_proj2 + p3.points_ret_from_proj2 p1.total_s2_points = (p1.total_points_proj1 + p1.total_points_proj2 + p1.total_points_from_partner + p1.total_points_from_mgr) p2.total_s2_points = (p2.total_points_proj1 + p2.total_points_proj2 + p2.total_points_from_partner + p2.total_points_from_mgr) p3.total_s2_points = (p3.total_points_proj1 + p3.total_points_proj2 + p3.total_points_from_partner + p3.total_points_from_mgr) p1.total_points = p1.total_s1_points + p1.total_s2_points p2.total_points = p2.total_s1_points + p2.total_s2_points p3.total_points = p3.total_s1_points + p3.total_s2_points p1.total_compensation = '{0:.2f}'.format(p1.total_points / 100) p2.total_compensation = '{0:.2f}'.format(p2.total_points / 100) p3.total_compensation = '{0:.2f}'.format(p3.total_points / 100) class S2Results(Page): pass class PEQE1(Page): form_model = 'player' form_fields = ['manager_trusts_me', 'manager_trusts_B', 'firm_trusts_me', 'firm_trusts_all_emps', 'trust_manager', 'trust_partner', 'trust_firm', 'exit_team', 'teammate_partner', 'teammate_manager', 'teammate_firm', 'partner_cares', 'partner_cares_magnitude', 'manager_cares', 'manager_cares_magnitude', 'self_control_resp', 'EmpB_control_resp', 'mgr_control_resp', 'firm_control_resp'] @staticmethod def is_displayed(player): return player.e_role == "Employee" class PEQE2(Page): form_model = 'player' @staticmethod def get_form_fields(player): if player.condition == 3 and player.control_in_place == 1: return ['perceived_autonomy', 'manager_intrusion', 'firm_intrusion', 'coop_right', 'coop_partner_want', 'coop_mgr_want', 'coop_firm_want', 'emp_coop_payoff', 'manager_fairness', 'firm_fairness', 'control_fairness', 'control_reaction', 'control_motivation', 'control_reason_1', 'control_reason_2', 'control_reason_3', 'control_reason_4', 'control_reason_5', 'control_reason_6', 'control_reason_7', 'control_reason_8', 'control_reason_9'] else: return ['perceived_autonomy', 'manager_intrusion', 'firm_intrusion', 'coop_right', 'coop_partner_want', 'coop_mgr_want', 'coop_firm_want', 'emp_coop_payoff', 'manager_fairness', 'firm_fairness', 'control_fairness', 'control_reaction', 'control_motivation'] @staticmethod def is_displayed(player): return player.e_role == "Employee" class PEQM1(Page): form_model = 'player' @staticmethod def get_form_fields(player): if player.condition == 2 and player.control_in_place == 1: return ['emp_A_trust_me', 'emp_B_trust_me', 'firm_trust_me', 'firm_trusts_emps', 'trust_emp_A', 'trust_emp_B', 'm_trust_firm', 'm_exit_team', 'm_teammate_emp_A', 'm_teammate_emp_B', 'm_teammate_firm', 'm_self_control_resp', 'm_emps_control_resp', 'm_firm_control_resp', 'emp_autonomy_A', 'emp_autonomy_B', 'emps_coop_payoffs', 'm_control_fairness', 'hypo_want_control', 'm_control_reason_1', 'm_control_reason_2', 'm_control_reason_3', 'm_control_reason_4', 'm_control_reason_5', 'm_control_reason_6', 'm_control_reason_7', 'm_control_reason_8', 'm_control_reason_9', 'm_control_reason_10'] elif player.control_in_place == 1: return ['emp_A_trust_me', 'emp_B_trust_me', 'firm_trust_me', 'firm_trusts_emps', 'trust_emp_A', 'trust_emp_B', 'm_trust_firm', 'm_exit_team', 'm_teammate_emp_A', 'm_teammate_emp_B', 'm_teammate_firm', 'm_self_control_resp', 'm_emps_control_resp', 'm_firm_control_resp', 'emp_autonomy_A', 'emp_autonomy_B', 'emps_coop_payoffs', 'm_control_fairness', 'hypo_want_control', 'perceived_control_motivation'] else: return ['emp_A_trust_me', 'emp_B_trust_me', 'firm_trust_me', 'firm_trusts_emps', 'trust_emp_A', 'trust_emp_B', 'm_trust_firm', 'm_exit_team', 'm_teammate_emp_A', 'm_teammate_emp_B', 'm_teammate_firm', 'm_self_control_resp', 'm_emps_control_resp', 'm_firm_control_resp', 'emp_autonomy_A', 'emp_autonomy_B', 'emps_coop_payoffs', 'm_control_fairness', 'hypo_want_control'] @staticmethod def is_displayed(player): return player.e_role == "Manager" class PEQ3(Page): form_model = 'player' form_fields = ['outside_employment', 'real_mgr_relationship', 'real_org_identification', 'prop_trust_1', 'prop_trust_2', 'prop_trust_3', 'prop_trust_4', 'prop_trust_5', 'prop_trust_6', 'prop_trust_7', 'prop_trust_8', 'gender', 'age', 'work_experience', 'education'] class ExitResults(Page): pass page_sequence = \ [ GroupWait, Resource1, MgrInterim, DecisionWait1, Results1, Resource2, DecisionWait2, Results2, Resource3, DecisionWait3, Results3, Resource4, DecisionWait4, Results4, Resource5, DecisionWait5, Results5, Resource6, DecisionWait6, Results6, TaskInstructions3, ProjectDecision, ProjectDecision2, DecisionWaitT, ProjectDecision3, DecisionWaitT2, S2Results, PEQE1, PEQM1, PEQE2, PEQ3, ExitResults ]