from otree.api import * import random DEBUG = False ### todo: Set to False for real experiment & controlstages working / True doc = """ "Environmental Experiment". """ class C(BaseConstants): NAME_IN_URL = 'Environmental_Questionnaire_Manager' PLAYERS_PER_GROUP = None NUM_ROUNDS = 1 player_roles = ['employee', 'employer'] class Subsession(BaseSubsession): pass class Group(BaseGroup): pass class Player(BasePlayer): player_Type = models.IntegerField() user_Role = models.StringField() correct_answer = models.IntegerField(initial=0) User_input = models.IntegerField(blank=True) total_correct = models.IntegerField() amount = models.IntegerField() numberInput = models.IntegerField() counter = models.IntegerField(initial=0) instructions = models.IntegerField( label="Empfanden Sie die Instruktionen zum Experiment als gut verständlich?", choices=[ [1, "Ja"], [0, "Nein"], ], widget=widgets.RadioSelect, ) instructions_comment = models.StringField( blank=True, label="Falls nicht, warum?", ) managerQ1 = models.IntegerField( label="Haben Ihre persönlichen Umwelteinstellungen Ihr Spendeverhalten im Experiment beeinflusst?", choices=[ [1, "Ja"], [0, "Nein"], ], widget=widgets.RadioSelect, ) managerQ1_comment = models.StringField( blank=True, label="Falls nicht, warum?", ) managerQ2 = models.IntegerField( label="Inwieweit haben Sie sich dazu verpflichtet gefühlt, die von Ihrem Mitarbeiter generierten Ressourcen für die Gewinnerzielung des Unternehmen zu verwenden?", choices=[ [1, "Überhaupt nicht"], [2, "Eher nicht"], [3, "Weder noch"], [4, "Eher stark"], [5, "Stark"], ], widget=widgets.RadioSelect, ) attentioncheckM = models.IntegerField( label="Bitte wählen Sie die Ziffer 4", choices=[ [1, "1"], [2, "2"], [3, "4"], [4, "3"], ], widget = widgets.RadioSelect, ) donationQ1 = models.IntegerField( label="Wie oft haben Sie bisher für gemeinnützige Projekte gespendet?", choices=[ [1, "Noch nie"], [2, "1 mal"], [3, "2-3 mal"], [4, "Häufiger als 3 mal"], ], widget=widgets.RadioSelect, ) donationQ2 = models.IntegerField( label="An welche geographischen Regionen würden Sie am ehesten spenden?", choices=[ [1, "Deutschland"], [2, "Westeuropa außerhalb von Deutschland"], [3, "Osteuropa"], [4, "Afrika"], [5, "Lateinamerika"], [6, "Asien"], [7, "Ich habe keine geografische Präferenz"], ], widget=widgets.RadioSelect, ) donationQ3 = models.IntegerField( label="An welches der folgenden Arten von gemeinnützigen Projekten würden Sie am ehesten spenden?", choices=[ [1, "Hilfsprojekte für Kinder und Bildung (z.B. UNICEF, SOS Kinderdörfer, Save the Children)"], [2, "Hilfsprojekte gegen Hunger und Armut (z.B. SOS Kinderdörfer, Gemeinsam für Afrika, Welthungerhilfe)"], [3, "Hilfsprojekte für Frieden und Schlichtung"], [4, "Hilfsprojekte für Tiere / Umwelt (z.B. Greenpeace, WWF, We want MOOR)"], ], widget=widgets.RadioSelect, ) charity = models.IntegerField( label="Wie nehmen Sie die Organisation 'We want MOOR' wahr?", choices=[ [1, "Sehr negativ"], [2, "Eher negativ"], [3, "Weder noch"], [4, "Eher positiv"], [5, "Sehr positiv"], ], widget=widgets.RadioSelect, ) charity_impact = models.IntegerField( label="Hat unsere Auswahl der Spendenorganisation „We Want MOOR“ Ihre Entscheidung im Experiment beeinflusst?", choices=[ [1, "Ja"], [0, "Nein"], ], widget=widgets.RadioSelect, ) charity_impact_comment = models.StringField( blank=True, label="Falls ja, wie?", ) attitudeQ1 = models.IntegerField( label="Unabhängig von diesem Experiment: Wie wichtig ist die Umwelteinstellung Ihres Vorgesetzten für Sie persönlich?", choices=[ [1, "Sehr unwichtig"], [2, "Eher unwichtig"], [3, "Weder noch"], [4, "Eher wichtig"], [5, "Sehr wichtig"], ], widget=widgets.RadioSelect, ) attitudeQ2 = models.IntegerField( label="Unabhängig von diesem Experiment: Wie wichtig ist es Ihrer Meinung nach, dass Führungskräfte ihre persönlichen Meinungen und Werte bezüglich ihrer Umwelteinstellungen offen an ihre Mitarbeiter kommunizieren?", choices=[ [1, "Sehr unwichtig"], [2, "Eher unwichtig"], [3, "Weder noch"], [4, "Eher wichtig"], [5, "Sehr wichtig"], ], widget=widgets.RadioSelect, ) attitudeQ3 = models.IntegerField( label="Unabhängig von diesem Experiment: Wie wichtig ist es Ihrer Meinung nach für ein Unternehmen, Manager mit einer positiven Umwelteinstellung einzustellen?", choices=[ [1, "Sehr unwichtig"], [2, "Eher unwichtig"], [3, "Weder noch"], [4, "Eher wichtig"], [5, "Sehr wichtig"], ], widget=widgets.RadioSelect, ) age = models.IntegerField( label="Wie alt sind Sie?", ) gender = models.IntegerField( label="Welchem Geschlecht fühlen Sie sich zugehörig?", choices=[ [1, "weiblich"], [2, "männlich"], [3, "nicht-binär"] ], ) educ = models.IntegerField( label="Bitte geben Sie den höchsten Bildungsabschluss an, den Sie bisher erlangt haben.", choices=[ [0, "Kein formaler Bildungsabschluss"], [1, "Haupt-/Realschule"], [2, "(Fach-)Abitur"], [3, "Berufsausbildung"], [4, "Bachelor"], [5, "Master/Diplom"], [6, "Promotion"], ], widget=widgets.RadioSelect, ) student = models.IntegerField( label="Studieren Sie aktuell?", choices=[ [1, "Ja"], [0, "Nein"], ], widget=widgets.RadioSelect, ) major = models.StringField( label="Bitte geben Sie Ihren aktuellen Studiengang / Beruf an.", ) living = models.StringField( label="Welche Option beschreibt Ihren Wohnort am besten?", choices=[ [1, "Ländlich (weniger als 20.000 Einwohner)"], [2, "Kleinere Stadt (20.000 bis 50.000 Einwohner)"], [2, "Mittlere Stadt (50.000 bis 250.000 Einwohner)"], [4, "Größere Stadt (mehr als 250.000 Einwohner)"], ], widget=widgets.RadioSelect, ) income = models.IntegerField( label="In welchem der folgenden Intervalle liegt Ihr Monats-Nettoeinkommen?", choices=[ [1, "bis 749 Euro"], [2, "750 bis 1.249 Euro"], [3, "1.250 bis 1.749 Euro"], [4, "1.750 bis 2.499 Euro"], [5, "mehr als 2.500 Euro"], ], widget=widgets.RadioSelect, ) german = models.IntegerField( label="Ist Deutsch Ihre Erstsprache?", choices=[ [1, "Ja"], [2, "Nein"], ], widget=widgets.RadioSelect, ) comment = models.LongStringField( blank=True, label="Möchten Sie uns noch etwas mitteilen? (optional)", ) class Questionnaire(Page): @staticmethod def is_displayed(player: Player): return player.round_number == C.NUM_ROUNDS class ExperimentFeedback(Page): form_model = 'player' form_fields = ['instructions', 'instructions_comment', 'managerQ1', 'managerQ1_comment', 'managerQ2', 'attentioncheckM'] @staticmethod def is_displayed(player: Player): return player.round_number == C.NUM_ROUNDS class Attitudes(Page): form_model = 'player' form_fields = ['donationQ1', 'donationQ2', 'donationQ3', 'charity', 'charity_impact', 'charity_impact_comment', 'attitudeQ1', 'attitudeQ2', 'attitudeQ3'] @staticmethod def is_displayed(player: Player): return player.round_number == C.NUM_ROUNDS class Demographics(Page): form_model = 'player' form_fields = ['age', 'gender', 'living', 'educ', 'student', 'major', 'income', 'german', 'comment'] @staticmethod def is_displayed(player: Player): return player.round_number == C.NUM_ROUNDS class FinalPage(Page): @staticmethod def is_displayed(player: Player): return player.round_number == C.NUM_ROUNDS page_sequence = [Questionnaire, ExperimentFeedback, Attitudes, Demographics, FinalPage, ]