from otree.api import *
doc = """
Your app description
"""
class C(BaseConstants):
NAME_IN_URL = 'lastquestions'
PLAYERS_PER_GROUP = None
NUM_ROUNDS = 1
timers = dict(demographics=60 * 2, lastquestions=60 * 2, justifiability=60 * 2)
class Subsession(BaseSubsession):
pass
class Group(BaseGroup):
pass
class Player(BasePlayer):
approval1 = models.IntegerField(
label="La maggioranza dei membri di un altro gruppo ha dichiarato tutto il reddito e pensa che tutti debbano dichiararlo interamente. Uno dei membri di tale gruppo ha dichiarato tutto il reddito. Come giudica il comportamento di questa persona?",
choices=[
[1, "Non approvo per nulla"],
[2, "Per lo più non approvo"],
[3, "Né approvo né disapprovo"],
[4, "Approvo abbastanza"],
[5, "Approvo assolutamente"],
],
)
approval2 = models.IntegerField(
label="La maggioranza dei membri di un altro gruppo ha dichiarato tutto il reddito e pensa che tutti debbano dichiararlo interamente. Uno dei membri di tale gruppo non ha dichiarato nulla. Come giudica il comportamento di questa persona?",
choices=[
[1, "Non approvo per nulla"],
[2, "Per lo più non approvo"],
[3, "Né approvo né disapprovo"],
[4, "Approvo abbastanza"],
[5, "Approvo assolutamente"],
],
)
approval3 = models.IntegerField(
label="La maggioranza dei membri di un altro gruppo ha dichiarato meno della metà del reddito e pensa che tutti debbano dichiararne meno della metà. Uno dei membri di tale gruppo ha dichiarato tutto. Come giudica il comportamento di questa persona?",
choices=[
[1, "Non approvo per nulla"],
[2, "Per lo più non approvo"],
[3, "Né approvo né disapprovo"],
[4, "Approvo abbastanza"],
[5, "Approvo assolutamente"],
],
)
approval4 = models.IntegerField(
label="La maggioranza dei membri di un altro gruppo ha dichiarato meno della metà del reddito e pensa che tutti debbano dichiararne meno della metà. Uno dei membri di tale gruppo non ha dichiarato nulla. Come giudica il comportamento di questa persona?",
choices=[
[1, "Non approvo per nulla"],
[2, "Per lo più non approvo"],
[3, "Né approvo né disapprovo"],
[4, "Approvo abbastanza"],
[5, "Approvo assolutamente"],
],
)
justifiability1 = models.IntegerField(
label="Cercare di ottenere dallo Stato benefici ai quali non si ha diritto.",
choices=[
[1, "Non giustifico per nulla"],
[2, "Per lo più non giustifico"],
[3, "Né giustifico né non giustifico"],
[4, "Giustifico abbastanza"],
[5, "Giustifico assolutamente"],
],
)
justifiability2 = models.IntegerField(
label="Accettare una mazzetta nell'adempimento del proprio dovere.",
choices=[
[1, "Non giustifico per nulla"],
[2, "Per lo più non giustifico"],
[3, "Né giustifico né non giustifico"],
[4, "Giustifico abbastanza"],
[5, "Giustifico assolutamente"],
],
)
justifiability3 = models.IntegerField(
label="Buttare l'immondizia per strada e non negli appositi cassonetti.",
choices=[
[1, "Non giustifico per nulla"],
[2, "Per lo più non giustifico"],
[3, "Né giustifico né non giustifico"],
[4, "Giustifico abbastanza"],
[5, "Giustifico assolutamente"],
],
)
justifiability4 = models.IntegerField(
label="Non pagare il biglietto sui mezzi di trasporto.",
choices=[
[1, "Non giustifico per nulla"],
[2, "Per lo più non giustifico"],
[3, "Né giustifico né non giustifico"],
[4, "Giustifico abbastanza"],
[5, "Giustifico assolutamente"],
],
)
age = models.IntegerField(
label="Indichi la Sua età",
min=18, max=99
)
gender = models.StringField(label="Qual è il Suo genere?",
choices=['Maschio', 'Femmina', 'Altro', 'Preferisco non specificare']
)
occupationalstatus = models.StringField(label="Qual è attualmente la Sua posizione lavorativa?",
choices=['Occupata/o autonoma/o', 'Imprenditrice/imprenditore',
'Occupata/o dipendente pubblico',
'Occupata/o dipendente privato', 'Pensionata/o', 'Studente(ssa)',
'Disoccupata/o', 'Inattiva/o']
)
regions = models.StringField(label="In quale regione italiana è nata/o?",
choices=['Abruzzo', 'Basilicata', 'Calabria', 'Campania', 'Emilia Romagna',
'Friuli Venezia Giulia', 'Lazio',
'Liguria', 'Lombardia', 'Marche', 'Molise', 'Piemonte',
'Provincia Autonoma di Bolzano',
'Provincia Autonoma di Trento', 'Puglia', 'Sardegna', 'Sicilia', 'Toscana',
'Umbria', 'Valle dAosta',
'Veneto']
)
regionsmostlylive = models.StringField(label="In quale regione italiana vive prevalentemente?",
choices=['Abruzzo', 'Basilicata', 'Calabria', 'Campania', 'Emilia Romagna',
'Friuli Venezia Giulia', 'Lazio',
'Liguria', 'Lombardia', 'Marche', 'Molise', 'Piemonte',
'Provincia Autonoma di Bolzano',
'Provincia Autonoma di Trento', 'Puglia', 'Sardegna', 'Sicilia',
'Toscana',
'Umbria', 'Valle dAosta',
'Veneto']
)
# PAGES
class Approval(Page):
form_model = 'player'
form_fields = ['approval1', 'approval2', 'approval3', 'approval4']
timeout_seconds = C.timers['lastquestions']
class Justifiability(Page):
form_model = 'player'
form_fields = ['justifiability1', 'justifiability2', 'justifiability3', 'justifiability4']
timeout_seconds = C.timers['justifiability']
class Demographics(Page):
form_model = 'player'
form_fields = ['age', 'gender', 'occupationalstatus', 'regions', 'regionsmostlylive']
timeout_seconds = C.timers['demographics']
@staticmethod
def before_next_page(player: Player, timeout_happened):
if timeout_happened:
player.timeout = True
player.participant.dropout = True
@staticmethod
def app_after_this_page(player: Player, upcoming_apps):
participant = player.participant
if participant.dropout:
return upcoming_apps[-1]
page_sequence = [Approval, Justifiability, Demographics]