from otree.api import * from otree.models import player doc = """ Your app description """ class C(BaseConstants): NAME_IN_URL = 'survey' PLAYERS_PER_GROUP = None NUM_ROUNDS = 1 # label_for_questions = "Sind Sie tendenziell dafür oder dagegen?" choices_for_item_questions = ["Dafür", "Dagegen", "Ist mir egal"] choices_for_AB_questions = ["A", "B", "Beide gleich gut"] class Group(BaseGroup): pass class Subsession(BaseSubsession): pass class Player(BasePlayer): count_coinsY = models.IntegerField(initial=0) count_coinsN = models.IntegerField(initial=0) like_speed_limit = models.StringField(label="Tempolimit auf 130 km/h auf Autobahnen festlegen", choices=C.choices_for_item_questions, widget=widgets.RadioSelect) like_engine_ban = models.StringField(label="Verbot der klassischen Verbrennungsmotoren ab 2030 (außer E-fuels)", choices=C.choices_for_item_questions, widget=widgets.RadioSelect) CSpeedLimitY = models.StringField(label="Maßnahme 1: Tempolimit auf 130 km/h auf Autobahnen festlegen
" "Maßnahme 2: Verbot der klassischen Verbrennungsmotoren ab 2030 " "(außer E-fuels)", choices=C.choices_for_AB_questions, widget=widgets.RadioSelect) CSpeedLimitN = models.StringField(label="Maßnahme 1: Tempolimit auf 130 km/h auf Autobahnen festlegen
" "Maßnahme 2: Verbot der klassischen Verbrennungsmotoren ab 2030 " "(außer E-fuels)", choices=C.choices_for_AB_questions, widget=widgets.RadioSelect) like_charg_station = models.StringField(label="Ausbau der Ladesäulen Infrastruktur für E-Mobilität", choices=C.choices_for_item_questions, widget=widgets.RadioSelect) like_e_fund = models.StringField(label="Einen „Fonds für Transformationszuschüsse“ einrichten, der Pendlerinnen " "und Pendlern mit niedrigem Einkommen beim Umstieg auf ein emissionsfreies " "Auto helfen soll", choices=["Dafür", "Dagegen", "Ist mir egal"], widget=widgets.RadioSelect) CECarY = models.StringField(label="Maßnahme 1: Ausbau der Ladesäulen Infrastruktur für E-Mobilität
" "Maßnahme 2: Einen „Fonds für Transformationszuschüsse“ einrichten, " "der Pendlerinnen und Pendlern mit niedrigem Einkommen beim Umstieg auf ein " "emissionsfreies Auto helfen soll", choices=C.choices_for_AB_questions, widget=widgets.RadioSelect) CECarN = models.StringField(label="Maßnahme 1: Ausbau der Ladesäulen Infrastruktur für E-Mobilität
" "Maßnahme 2: Einen „Fonds für Transformationszuschüsse“ einrichten, der " "Pendlerinnen und Pendlern mit niedrigem Einkommen beim Umstieg auf ein " "emissionsfreies Auto helfen soll", choices=C.choices_for_AB_questions, widget=widgets.RadioSelect) like_euro_ticket = models.StringField( label="Günstige Bahnfahrscheine nach dem Modell des „9 Euro Tickets“ einführen", choices=["Dafür", "Dagegen", "Ist mir egal"], widget=widgets.RadioSelect) like_train_invest = models.StringField( label="Große staatliche Investitionen in die Bahninfrastruktur (Züge und Schienen) und den " "Börsengang der Bahn nicht umsetzen", choices=["Dafür", "Dagegen", "Ist mir egal"], widget=widgets.RadioSelect) CTrainInvestY = models.StringField( label="Maßnahme 1: Günstige Bahnfahrscheine nach dem Modell des „9 Euro Tickets“ einführen / " "Maßnahme 2: Große staatliche Investitionen in die Bahninfrastruktur (Züge und Schienen) " "und den Börsengang der Bahn nicht umsetzen", choices=C.choices_for_AB_questions, widget=widgets.RadioSelect) CTrainInvestN = models.StringField( label="Maßnahme 1: Günstige Bahnfahrscheine nach dem Modell des „9 Euro Tickets“ einführen
" "Maßnahme 2: Große staatliche Investitionen in die Bahninfrastruktur (Züge und Schienen) " "und den Börsengang der Bahn nicht umsetzen", choices=C.choices_for_AB_questions, widget=widgets.RadioSelect) like_women_quota = models.StringField(label="Frauenquote in allen deutschen börsennotierten Unternehmen einführen", choices=C.choices_for_item_questions, widget=widgets.RadioSelect) like_child_care = models.StringField(label="Recht auf eine gebührenfreie öffentliche Kinderbetreuung", choices=C.choices_for_item_questions, widget=widgets.RadioSelect) CWomenCareY = models.StringField( label="Maßnahme 1: Frauenquote in allen deutschen börsennotierten Unternehmen einführen
" "Maßnahme 2: Recht auf eine gebührenfreie öffentliche Kinderbetreuung", choices=C.choices_for_AB_questions, widget=widgets.RadioSelect) CWomenCareN = models.StringField( label="Maßnahme 1: Frauenquote in allen deutschen börsennotierten Unternehmen einführen
" "Maßnahme 2: Recht auf eine gebührenfreie öffentliche Kinderbetreuung", choices=C.choices_for_AB_questions, widget=widgets.RadioSelect) like_manager_limit = models.StringField( label="Verbindliche Obergrenzen für Manager- und Vorstandsgehälter festlegen", choices=C.choices_for_item_questions, widget=widgets.RadioSelect) like_manager_tax = models.StringField( label="Managergehälter oberhalb von 500.000 Euro nicht mehr als Betriebsausgaben steuerlich absetzbar zulassen", choices=C.choices_for_item_questions, widget=widgets.RadioSelect) CManagerTaxY = models.StringField( label="Maßnahme 1: Verbindliche Obergrenzen für Manager- und Vorstandsgehälter festlegen
" "Maßnahme 2: Managergehälter oberhalb von 500.000 Euro nicht mehr als Betriebsausgaben " "steuerlich absetzbar zulassen", choices=C.choices_for_AB_questions, widget=widgets.RadioSelect) CManagerTaxN = models.StringField( label="Maßnahme 1: Verbindliche Obergrenzen für Manager- und Vorstandsgehälter festlegen
" "Maßnahme 2: Managergehälter oberhalb von 500.000 Euro nicht mehr als Betriebsausgaben " "steuerlich absetzbar zulassen", choices=C.choices_for_AB_questions, widget=widgets.RadioSelect) like_inheritance_tax = models.StringField(label="Erbschaftssteuer erhöhen", choices=C.choices_for_item_questions, widget=widgets.RadioSelect) like_wealth_tax = models.StringField(label="Vermögensteuer wieder einführen", choices=C.choices_for_item_questions, widget=widgets.RadioSelect) CInheritanceWealthY = models.StringField(label="Maßnahme 1: Erbschaftssteuer erhöhen
" "Maßnahme 2: Vermögensteuer wieder einführen", choices=C.choices_for_AB_questions, widget=widgets.RadioSelect) CInheritanceWealthN = models.StringField(label="Maßnahme 1: Erbschaftssteuer erhöhen
" "Maßnahme 2: Vermögensteuer wieder einführen", choices=C.choices_for_AB_questions, widget=widgets.RadioSelect) like_basic_taxallowance = models.StringField(label="Grundfreibetrag der Einkommensteuer erhöhen um kleine und " "mittlere Einkommen zu entlasten", choices=C.choices_for_item_questions, widget=widgets.RadioSelect) like_top_tax = models.StringField(label="Spitzensteuersatz erhöhen", choices=C.choices_for_item_questions, widget=widgets.RadioSelect) CBasicTaxY = models.StringField( label="Maßnahme 1: Grundfreibetrag der Einkommensteuer erhöhen um kleine und mittlere " "Einkommen zu entlasten
" "Maßnahme 2: Spitzensteuersatz erhöhen", choices=C.choices_for_AB_questions, widget=widgets.RadioSelect) CBasicTaxN = models.StringField(label="Maßnahme 1: Grundfreibetrag der Einkommensteuer erhöhen um kleine und " "mittlere Einkommen zu entlasten
Maßnahme 2: Spitzensteuersatz erhöhen", choices=C.choices_for_AB_questions, widget=widgets.RadioSelect) like_migrant_social = models.StringField(label="Einfacheren Zugang zu Sozialleistungen für Geflüchtete ermöglichen", choices=C.choices_for_item_questions, widget=widgets.RadioSelect) like_migrant_work = models.StringField(label="Zugang zu Arbeitsplätzen für Geflüchtete erleichtern", choices=C.choices_for_item_questions, widget=widgets.RadioSelect) CMigrantWorkY = models.StringField( label="Maßnahme 1: Einfacheren Zugang zu Sozialleistungen für Geflüchtete ermöglichen
" "Maßnahme 2: Zugang zu Arbeitsplätzen für Geflüchtete erleichtern", choices=C.choices_for_AB_questions, widget=widgets.RadioSelect) CMigrantWorkN = models.StringField( label="Maßnahme 1: Einfacheren Zugang zu Sozialleistungen für Geflüchtete ermöglichen
" "Maßnahme 2: Zugang zu Arbeitsplätzen für Geflüchtete erleichtern", choices=C.choices_for_AB_questions, widget=widgets.RadioSelect) like_nuclear_out = models.StringField(label="Am Atomausstieg festhalten", choices=C.choices_for_item_questions, widget=widgets.RadioSelect) like_coal_out = models.StringField(label="Kohleausstieg 2030 „vollenden“ (derzeit 2038)", choices=C.choices_for_item_questions, widget=widgets.RadioSelect) CNuclearCoalY = models.StringField(label="Maßnahme 1: Am Atomausstieg festhalten
" "Maßnahme 2: Kohleausstieg 2030 „vollenden“ (derzeit 2038)", choices=C.choices_for_AB_questions, widget=widgets.RadioSelect) CNuclearCoalN = models.StringField( label="Maßnahme 1: Am Atomausstieg festhalten
" "Maßnahme 2: Kohleausstieg 2030 „vollenden“ (derzeit 2038)", choices=C.choices_for_AB_questions, widget=widgets.RadioSelect) like_soli = models.StringField(label="Abschaffung des Solis für hohe Einkommen", choices=C.choices_for_item_questions, widget=widgets.RadioSelect) like_high_income = models.StringField(label="Erhöhung der Einkommensgrenze ab der der Spitzensteuersatz greift", choices=C.choices_for_item_questions, widget=widgets.RadioSelect) CSoliY = models.StringField(label="Maßnahme 1: Abschaffung des Solis für hohe Einkommen
" "Maßnahme 2: Erhöhung der Einkommensgrenze ab der der Spitzensteuersatz greift", choices=C.choices_for_AB_questions, widget=widgets.RadioSelect) CSoliN = models.StringField( label="Maßnahme 1: Abschaffung des Solis für hohe Einkommen
" "Maßnahme 2: Erhöhung der Einkommensgrenze ab der der Spitzensteuersatz greift", choices=C.choices_for_AB_questions, widget=widgets.RadioSelect) like_car_promise = models.StringField(label="Versprechen an die deutsche Autoindustrie, allen Antriebsarten eine " "Zukunft zu erhalten", choices=C.choices_for_item_questions, widget=widgets.RadioSelect) like_car_promotion = models.StringField(label="Staatliche Absatzförderung der Automobilindustrie in Deutschland", choices=C.choices_for_item_questions, widget=widgets.RadioSelect) CCarPromiseY = models.StringField(label="Maßnahme 1: Versprechen an die deutsche Autoindustrie, allen Antriebsarten " "eine Zukunft zu erhalten
Maßnahme 2: Staatliche Absatzförderung der " "Automobilindustrie in Deutschland", choices=C.choices_for_AB_questions, widget=widgets.RadioSelect) CCarPromiseN = models.StringField( label="Maßnahme 1: Versprechen an die deutsche Autoindustrie, allen Antriebsarten eine Zukunft zu " "erhalten
" "Maßnahme 2: Staatliche Absatzförderung der Automobilindustrie in Deutschland", choices=C.choices_for_AB_questions, widget=widgets.RadioSelect) like_data_storage = models.StringField(label="Regelung zur Speicherung und zum Abruf von Telefonnummern und " "IP-Adressen einführen (Vorratsdatenspeicherung)", choices=C.choices_for_item_questions, widget=widgets.RadioSelect) like_police_presence = models.StringField(label="Mehr Polizeipräsenz, Videoüberwachung mit intelligenter Technik " "im öffentlichen Raum, automatisierte Gesichtserkennung und " "Gefährder-Haft einführen", choices=C.choices_for_item_questions, widget=widgets.RadioSelect) CDataPoliceY = models.StringField(label="Maßnahme 1: Regelung zur Speicherung und zum Abruf von Telefonnummern " "und IP-Adressen einführen (Vorratsdatenspeicherung)
Maßnahme 2: " "Mehr Polizeipräsenz, Videoüberwachung mit intelligenter Technik im " "öffentlichen Raum, automatisierte Gesichtserkennung und Gefährder-Haft " "einführen", choices=C.choices_for_AB_questions, widget=widgets.RadioSelect) CDataPoliceN = models.StringField( label="Maßnahme 1: Regelung zur Speicherung und zum Abruf von Telefonnummern und IP-Adressen " "einführen (Vorratsdatenspeicherung)
Maßnahme 2: Mehr Polizeipräsenz, Videoüberwachung mit " "intelligenter Technik im öffentlichen Raum, automatisierte Gesichtserkennung und Gefährder-Haft " "einführen", choices=C.choices_for_AB_questions, widget=widgets.RadioSelect) like_asylum_limit = models.StringField(label="Einführung einer jährlichen Obergrenze von Asylanträgen", choices=C.choices_for_item_questions, widget=widgets.RadioSelect) like_dublin = models.StringField(label="Stellung von Asylanträgen nur in Ankunftsland in Europa erlauben " "(Dublin Verfahren)", choices=C.choices_for_item_questions, widget=widgets.RadioSelect) CAsylumDublinY = models.StringField(label="Maßnahme 1: Einführung einer jährlichen Obergrenze von Asylanträgen " "
Maßnahme 2: Stellung von Asylanträgen nur in Ankunftsland in Europa " "erlauben (Dublin Verfahren)", choices=C.choices_for_AB_questions, widget=widgets.RadioSelect) CAsylumDublinN = models.StringField( label="Maßnahme 1: Einführung einer jährlichen Obergrenze von Asylanträgen
Maßnahme 2: Stellung von " "Asylanträgen nur in Ankunftsland in Europa erlauben (Dublin Verfahren)" "einführen", choices=C.choices_for_AB_questions, widget=widgets.RadioSelect) like_tax_cap = models.StringField(label="Keinen höheren Spitzensteuersatz und keine Vermögenssteuer einführen", choices=C.choices_for_item_questions, widget=widgets.RadioSelect) like_social_cap = models.StringField(label="Sozialausgaben des Bundes deckeln", choices=C.choices_for_item_questions, widget=widgets.RadioSelect) CCapY = models.StringField(label="Maßnahme 1: Keinen höheren Spitzensteuersatz und keine Vermögenssteuer " "einführen
Maßnahme 2: Sozialausgaben des Bundes deckeln", choices=C.choices_for_AB_questions, widget=widgets.RadioSelect) CCapN = models.StringField(label="Maßnahme 1: Keinen höheren Spitzensteuersatz und keine Vermögenssteuer " "einführen
Maßnahme 2: - Sozialausgaben des Bundes deckeln", choices=C.choices_for_AB_questions, widget=widgets.RadioSelect) # PAGES class Welcome(Page): form_model = "player" class SpeedLimit(Page): def is_displayed(player: Player): return player.count_coinsY < 3 or player.count_coinsN < 3 template_name = "_templates/global/ItemPage.html" form_fields = ["like_speed_limit"] form_model = "player" class EngineBan(Page): def is_displayed(player: Player): return player.like_speed_limit != "Ist mir egal" and (player.count_coinsY < 3 or player.count_coinsN < 3) template_name = "_templates/global/ItemPage.html" form_fields = ["like_engine_ban"] form_model = "player" class ABSpeedLimitY(Page): template_name = "_templates/global/ABPage.html" form_fields = ["CSpeedLimitY"] form_model = "player" def is_displayed(player: Player): return player.count_coinsY < 3 and player.like_speed_limit == "Dafür" and player.like_engine_ban == "Dafür" @staticmethod def before_next_page(player: Player, timeout_happened): player.count_coinsY = player.count_coinsY + 1 class ABSpeedLimitN(Page): template_name = "_templates/global/ABPage.html" form_fields = ["CSpeedLimitN"] form_model = "player" def is_displayed(player: Player): return player.count_coinsN < 3 and player.like_speed_limit == "Dagegen" and player.like_engine_ban == "Dagegen" @staticmethod def before_next_page(player: Player, timeout_happened): player.count_coinsN = player.count_coinsN + 1 class ChargStation(Page): def is_displayed(player: Player): return player.count_coinsY < 3 or player.count_coinsN < 3 template_name = "_templates/global/ItemPage.html" form_fields = ["like_charg_station"] form_model = "player" class EFund(Page): def is_displayed(player: Player): return player.like_charg_station != "Ist mir egal" and (player.count_coinsY < 3 or player.count_coinsN < 3) template_name = "_templates/global/ItemPage.html" form_fields = ["like_e_fund"] form_model = "player" class ABECarY(Page): template_name = "_templates/global/ABPage.html" def is_displayed(player: Player): return player.count_coinsY < 3 and player.like_charg_station == "Dafür" and player.like_e_fund == "Dafür" form_fields = ["CECarY"] form_model = "player" @staticmethod def before_next_page(player: Player, timeout_happened): player.count_coinsY = player.count_coinsY + 1 class ABECarN(Page): template_name = "_templates/global/ABPage.html" def is_displayed(player: Player): return player.count_coinsN < 3 and player.like_charg_station == "Dagegen" and player.like_e_fund == "Dagegen" form_fields = ["CECarN"] form_model = "player" @staticmethod def before_next_page(player: Player, timeout_happened): player.count_coinsN = player.count_coinsN + 1 class EuroTicket(Page): def is_displayed(player: Player): return player.count_coinsY < 3 or player.count_coinsN < 3 template_name = "_templates/global/ItemPage.html" form_fields = ["like_euro_ticket"] form_model = "player" class TrainInvest(Page): def is_displayed(player: Player): return player.like_euro_ticket != "Ist mir egal" and (player.count_coinsY < 3 or player.count_coinsN < 3) template_name = "_templates/global/ItemPage.html" form_fields = ["like_train_invest"] form_model = "player" class ABTrainInvestY(Page): template_name = "_templates/global/ABPage.html" def is_displayed(player: Player): return player.count_coinsY < 3 and player.like_euro_ticket == "Dafür" and player.like_train_invest == "Dafür" form_fields = ["CTrainInvestY"] form_model = "player" @staticmethod def before_next_page(player: Player, timeout_happened): player.count_coinsY = player.count_coinsY + 1 class ABTrainInvestN(Page): template_name = "_templates/global/ABPage.html" def is_displayed(player: Player): return player.count_coinsN < 3 and player.like_euro_ticket == "Dagegen" and player.like_train_invest == "Dagegen" form_fields = ["CTrainInvestN"] form_model = "player" @staticmethod def before_next_page(player: Player, timeout_happened): player.count_coinsN = player.count_coinsN + 1 class WomenQuota(Page): def is_displayed(player: Player): return player.count_coinsY < 3 or player.count_coinsN < 3 template_name = "_templates/global/ItemPage.html" form_fields = ["like_women_quota"] form_model = "player" class ChildCare(Page): def is_displayed(player: Player): return player.like_women_quota != "Ist mir egal" and (player.count_coinsY < 3 or player.count_coinsN < 3) template_name = "_templates/global/ItemPage.html" form_fields = ["like_child_care"] form_model = "player" class ABWomenCareY(Page): template_name = "_templates/global/ABPage.html" def is_displayed(player: Player): return player.count_coinsY < 3 and player.like_women_quota == "Dafür" and player.like_child_care == "Dafür" form_fields = ["CWomenCareY"] form_model = "player" @staticmethod def before_next_page(player: Player, timeout_happened): player.count_coinsY = player.count_coinsY + 1 class ABWomenCareN(Page): template_name = "_templates/global/ABPage.html" def is_displayed(player: Player): return player.count_coinsN < 3 and player.like_women_quota == "Dagegen" and player.like_child_care == "Dagegen" form_fields = ["CWomenCareN"] form_model = "player" @staticmethod def before_next_page(player: Player, timeout_happened): player.count_coinsN = player.count_coinsN + 1 class ManagerLimit(Page): def is_displayed(player: Player): return player.count_coinsY < 3 or player.count_coinsN < 3 template_name = "_templates/global/ItemPage.html" form_fields = ["like_manager_limit"] form_model = "player" class ManagerTax(Page): def is_displayed(player: Player): return player.count_coinsY < 3 and player.count_coinsN < 3 and player.like_manager_limit != "Ist mir egal" template_name = "_templates/global/ItemPage.html" form_fields = ["like_manager_tax"] form_model = "player" class ABManagerTaxY(Page): template_name = "_templates/global/ABPage.html" def is_displayed(player: Player): return player.count_coinsY < 3 and player.like_manager_limit == "Dafür" and player.like_manager_tax == "Dafür" form_fields = ["CManagerTaxY"] form_model = "player" @staticmethod def before_next_page(player: Player, timeout_happened): player.count_coinsY = player.count_coinsY + 1 class ABManagerTaxN(Page): template_name = "_templates/global/ABPage.html" def is_displayed(player: Player): return player.count_coinsN < 3 and player.like_manager_limit == "Dagegen" and player.like_manager_tax == "Dagegen" form_fields = ["CManagerTaxN"] form_model = "player" @staticmethod def before_next_page(player: Player, timeout_happened): player.count_coinsN = player.count_coinsN + 1 class InheritanceTax(Page): def is_displayed(player: Player): return player.count_coinsY < 3 or player.count_coinsN < 3 template_name = "_templates/global/ItemPage.html" form_fields = ["like_inheritance_tax"] form_model = "player" class WealthTax(Page): def is_displayed(player: Player): return player.like_inheritance_tax != "Ist mir egal" and (player.count_coinsY < 3 or player.count_coinsN < 3) template_name = "_templates/global/ItemPage.html" form_fields = ["like_wealth_tax"] form_model = "player" class ABInheritanceWealthY(Page): template_name = "_templates/global/ABPage.html" def is_displayed(player: Player): return player.count_coinsY < 3 and player.like_inheritance_tax == "Dafür" and player.like_wealth_tax == "Dafür" form_fields = ["CInheritanceWealthY"] form_model = "player" @staticmethod def before_next_page(player: Player, timeout_happened): player.count_coinsY = player.count_coinsY + 1 class ABInheritanceWealthN(Page): template_name = "_templates/global/ABPage.html" def is_displayed(player: Player): return player.count_coinsN < 3 and player.like_inheritance_tax == "Dagegen" and player.like_wealth_tax == "Dagegen" form_fields = ["CInheritanceWealthN"] form_model = "player" @staticmethod def before_next_page(player: Player, timeout_happened): player.count_coinsN = player.count_coinsN + 1 class BasicTaxallowance(Page): def is_displayed(player: Player): return player.count_coinsY < 3 or player.count_coinsN < 3 template_name = "_templates/global/ItemPage.html" form_fields = ["like_basic_taxallowance"] form_model = "player" class TopTax(Page): def is_displayed(player: Player): return player.like_basic_taxallowance != "Ist mir egal" and (player.count_coinsY < 3 or player.count_coinsN < 3) template_name = "_templates/global/ItemPage.html" form_fields = ["like_top_tax"] form_model = "player" class ABBasicTaxY(Page): template_name = "_templates/global/ABPage.html" def is_displayed(player: Player): return player.count_coinsY < 3 and player.like_basic_taxallowance == "Dafür" and player.like_top_tax == "Dafür" form_fields = ["CBasicTaxY"] form_model = "player" @staticmethod def before_next_page(player: Player, timeout_happened): player.count_coinsY = player.count_coinsY + 1 class ABBasicTaxN(Page): template_name = "_templates/global/ABPage.html" def is_displayed(player: Player): return player.count_coinsN < 3 and player.like_basic_taxallowance == "Dagegen" and player.like_top_tax == "Dagegen" form_fields = ["CBasicTaxN"] form_model = "player" @staticmethod def before_next_page(player: Player, timeout_happened): player.count_coinsN = player.count_coinsN + 1 class MigrantSocial(Page): def is_displayed(player: Player): return player.count_coinsY < 3 or player.count_coinsN < 3 template_name = "_templates/global/ItemPage.html" form_fields = ["like_migrant_social"] form_model = "player" class MigrantWork(Page): def is_displayed(player: Player): return player.like_migrant_social != "Ist mir egal" and (player.count_coinsY < 3 or player.count_coinsN < 3) template_name = "_templates/global/ItemPage.html" form_fields = ["like_migrant_work"] form_model = "player" class ABMigrantWorkY(Page): template_name = "_templates/global/ABPage.html" def is_displayed(player: Player): return player.count_coinsY < 3 and player.like_migrant_social == "Dafür" and player.like_migrant_work == "Dafür" form_fields = ["CMigrantWorkY"] form_model = "player" @staticmethod def before_next_page(player: Player, timeout_happened): player.count_coinsY = player.count_coinsY + 1 class ABMigrantWorkN(Page): template_name = "_templates/global/ABPage.html" def is_displayed(player: Player): return player.count_coinsN < 3 and player.like_migrant_social == "Dagegen" and player.like_migrant_work == "Dagegen" form_fields = ["CMigrantWorkN"] form_model = "player" @staticmethod def before_next_page(player: Player, timeout_happened): player.count_coinsN = player.count_coinsN + 1 class NuclearOut(Page): def is_displayed(player: Player): return player.count_coinsY < 3 or player.count_coinsN < 3 template_name = "_templates/global/ItemPage.html" form_fields = ["like_nuclear_out"] form_model = "player" class CoalOut(Page): def is_displayed(player: Player): return player.like_nuclear_out != "Ist mir egal" and (player.count_coinsY < 3 or player.count_coinsN < 3) template_name = "_templates/global/ItemPage.html" form_fields = ["like_coal_out"] form_model = "player" class ABNuclearCoalY(Page): template_name = "_templates/global/ABPage.html" def is_displayed(player: Player): return player.count_coinsY < 3 and player.like_nuclear_out == "Dafür" and player.like_coal_out == "Dafür" form_fields = ["CNuclearCoalY"] form_model = "player" @staticmethod def before_next_page(player: Player, timeout_happened): player.count_coinsY = player.count_coinsY + 1 class ABNuclearCoalN(Page): template_name = "_templates/global/ABPage.html" def is_displayed(player: Player): return player.count_coinsN < 3 and player.like_nuclear_out == "Dagegen" and player.like_coal_out == "Dagegen" form_fields = ["CNuclearCoalN"] form_model = "player" @staticmethod def before_next_page(player: Player, timeout_happened): player.count_coinsN = player.count_coinsN + 1 class Soli(Page): def is_displayed(player: Player): return player.count_coinsY < 3 or player.count_coinsN < 3 template_name = "_templates/global/ItemPage.html" form_fields = ["like_soli"] form_model = "player" class HighIncome(Page): def is_displayed(player: Player): return player.like_soli != "Ist mir egal" and (player.count_coinsY < 3 or player.count_coinsN < 3) template_name = "_templates/global/ItemPage.html" form_fields = ["like_high_income"] form_model = "player" class ABSoliY(Page): template_name = "_templates/global/ABPage.html" def is_displayed(player: Player): return player.count_coinsY < 3 and player.like_soli == "Dafür" and player.like_high_income == "Dafür" form_fields = ["CNuclearCoalY"] form_model = "player" @staticmethod def before_next_page(player: Player, timeout_happened): player.count_coinsY = player.count_coinsY + 1 class ABSoliN(Page): template_name = "_templates/global/ABPage.html" def is_displayed(player: Player): return player.count_coinsN < 3 and player.like_soli == "Dagegen" and player.like_high_income == "Dagegen" form_fields = ["CSoliN"] form_model = "player" @staticmethod def before_next_page(player: Player, timeout_happened): player.count_coinsN = player.count_coinsN + 1 class CarPromise(Page): def is_displayed(player: Player): return player.count_coinsY < 3 or player.count_coinsN < 3 template_name = "_templates/global/ItemPage.html" form_fields = ["like_car_promise"] form_model = "player" class CarPromotion(Page): def is_displayed(player: Player): return player.like_car_promise != "Ist mir egal" and player.count_coinsY < 3 and player.count_coinsN < 3 template_name = "_templates/global/ItemPage.html" form_fields = ["like_car_promotion"] form_model = "player" class ABCarPromiseY(Page): template_name = "_templates/global/ABPage.html" def is_displayed(player: Player): return player.count_coinsY < 3 and player.like_car_promise == "Dafür" and player.like_car_promotion == "Dafür" form_fields = ["CCarPromiseY"] form_model = "player" @staticmethod def before_next_page(player: Player, timeout_happened): player.count_coinsY = player.count_coinsY + 1 class ABCarPromiseN(Page): template_name = "_templates/global/ABPage.html" def is_displayed(player: Player): return player.count_coinsN < 3 and player.like_car_promise == "Dagegen" and player.like_car_promotion == "Dagegen" form_fields = ["CCarPromiseN"] form_model = "player" @staticmethod def before_next_page(player: Player, timeout_happened): player.count_coinsN = player.count_coinsN + 1 class DataStorage(Page): def is_displayed(player: Player): return player.count_coinsY < 3 or player.count_coinsN < 3 template_name = "_templates/global/ItemPage.html" form_fields = ["like_data_storage"] form_model = "player" class PolicePresence(Page): def is_displayed(player: Player): return player.like_data_storage != "Ist mir egal" and (player.count_coinsY < 3 or player.count_coinsN < 3) template_name = "_templates/global/ItemPage.html" form_fields = ["like_police_presence"] form_model = "player" class ABDataPoliceY(Page): template_name = "_templates/global/ABPage.html" def is_displayed(player: Player): return player.count_coinsY < 3 and player.like_data_storage == "Dafür" and player.like_police_presence == "Dafür" form_fields = ["CDataPoliceY"] form_model = "player" @staticmethod def before_next_page(player: Player, timeout_happened): player.count_coinsY = player.count_coinsY + 1 class ABDataPoliceN(Page): template_name = "_templates/global/ABPage.html" def is_displayed(player: Player): return player.count_coinsN < 3 and player.like_data_storage == "Dagegen" and player.like_police_presence == "Dagegen" form_fields = ["CDataPoliceN"] form_model = "player" @staticmethod def before_next_page(player: Player, timeout_happened): player.count_coinsN = player.count_coinsN + 1 class AsylumLimit(Page): def is_displayed(player: Player): return player.count_coinsY < 3 or player.count_coinsN < 3 template_name = "_templates/global/ItemPage.html" form_fields = ["like_asylum_limit"] form_model = "player" class Dublin(Page): def is_displayed(player: Player): return player.like_asylum_limit != "Ist mir egal" and player.count_coinsY < 3 and player.count_coinsN < 3 template_name = "_templates/global/ItemPage.html" form_fields = ["like_dublin"] form_model = "player" class ABAsylumDublinY(Page): template_name = "_templates/global/ABPage.html" def is_displayed(player: Player): return player.count_coinsY < 3 and player.like_asylum_limit == "Dafür" and player.like_dublin == "Dafür" form_fields = ["CAsylumDublinY"] form_model = "player" @staticmethod def before_next_page(player: Player, timeout_happened): player.count_coinsY = player.count_coinsY + 1 class ABAsylumDublinN(Page): template_name = "_templates/global/ABPage.html" def is_displayed(player: Player): return player.count_coinsN < 3 and player.like_asylum_limit == "Dagegen" and player.like_dublin == "Dagegen" form_fields = ["CAsylumDublinN"] form_model = "player" @staticmethod def before_next_page(player: Player, timeout_happened): player.count_coinsN = player.count_coinsN + 1 class TaxCap(Page): def is_displayed(player: Player): return player.count_coinsY < 3 or player.count_coinsN < 3 template_name = "_templates/global/ItemPage.html" form_fields = ["like_tax_cap"] form_model = "player" class SocialCap(Page): def is_displayed(player: Player): return player.count_coinsY < 3 and player.count_coinsN < 3 and player.like_tax_cap != "Ist mir egal" template_name = "_templates/global/ItemPage.html" form_fields = ["like_social_cap"] form_model = "player" class ABCapY(Page): template_name = "_templates/global/ABPage.html" def is_displayed(player: Player): return player.like_tax_cap == "Dafür" and player.like_social_cap == "Dafür" and player.count_coinsY < 3 form_fields = ["CCapY"] form_model = "player" @staticmethod def before_next_page(player: Player, timeout_happened): player.count_coinsY = player.count_coinsY + 1 class ABCapN(Page): template_name = "_templates/global/ABPage.html" def is_displayed(player: Player): return player.like_tax_cap == "Dagegen" and player.like_social_cap == "Dagegen" and player.count_coinsN < 3 form_fields = ["CCapN"] form_model = "player" @staticmethod def before_next_page(player: Player, timeout_happened): player.count_coinsN = player.count_coinsN + 1 class ThankYou(Page): form_model = "player" page_sequence = [Welcome, SpeedLimit, EngineBan, ABSpeedLimitY, ABSpeedLimitN, ChargStation, EFund, ABECarY, ABECarN, Soli, HighIncome, ABSoliY, ABSoliN, CarPromise, CarPromotion, ABCarPromiseY, ABCarPromiseN, EuroTicket, TrainInvest, ABTrainInvestY, ABTrainInvestN, DataStorage, PolicePresence, ABDataPoliceY, ABDataPoliceN, WomenQuota, ChildCare, ABWomenCareY, ABWomenCareN, AsylumLimit, Dublin, ABAsylumDublinY, ABAsylumDublinN, ManagerLimit, ManagerTax, ABManagerTaxY, ABManagerTaxN, TaxCap, SocialCap, ABCapY, ABCapN, InheritanceTax, WealthTax, ABInheritanceWealthY, ABInheritanceWealthN, BasicTaxallowance, TopTax, ABBasicTaxY, ABBasicTaxN, MigrantSocial, MigrantWork, ABMigrantWorkY, ABMigrantWorkN, NuclearOut, CoalOut, ABNuclearCoalY, ABNuclearCoalN, ThankYou]