from otree.api import Currency as c, currency_range from ._builtin import Page, WaitPage from .models import Constants class SpecificIntroduction(Page): def is_displayed(self): return self.round_number == 1 class Introduction(Page): form_model = 'player' form_fields = ['email'] def is_displayed(self): return self.round_number == 1 class ResultsWaitPage(WaitPage): def after_all_players_arrive(self): pass # Seiten für klassische Projektplanung # class Planungsphase_klassisch(Page): form_model = 'player' form_fields = ['dauer_phase_1', 'dauer_phase_2', 'dauer_phase_3', 'dauer_phase_4','zuordnung_modul_1','zuordnung_modul_2','zuordnung_modul_3','zuordnung_modul_4'] def error_message(self, values): print('values is', values) if values['dauer_phase_1'] + values['dauer_phase_2'] + values['dauer_phase_3'] + values['dauer_phase_4'] != 9: return 'Du musst genau 9 Minuten verteilen' def is_displayed(self): return self.participant.vars['Zuordnung'] == 'klassisch' and self.round_number == 1 timeout_seconds = 180 def before_next_page(self): self.participant.vars['reihenfolge_klassisch'] = dict(zip(Constants.tasks_klassisch, [self.player.zuordnung_modul_1, self.player.zuordnung_modul_2, self.player.zuordnung_modul_3, self.player.zuordnung_modul_4])) print('vars sind', self.participant.vars) class Umsetzung_klassisch_1(Page): def is_displayed(self): return self.participant.vars['Zuordnung'] == 'klassisch' and self.round_number == self.participant.vars['reihenfolge_klassisch']['M1'] def get_timeout_seconds(self): return self.player.dauer_phase_1*60 class Umsetzung_klassisch_2(Page): def is_displayed(self): return self.participant.vars['Zuordnung'] == 'klassisch' and self.round_number == self.participant.vars['reihenfolge_klassisch']['M2'] def get_timeout_seconds(self): return self.player.dauer_phase_2*60 class Umsetzung_klassisch_3(Page): def is_displayed(self): return self.participant.vars['Zuordnung'] == 'klassisch' and self.round_number == self.participant.vars['reihenfolge_klassisch']['M3'] def get_timeout_seconds(self): return self.player.dauer_phase_3*60 class Umsetzung_klassisch_4(Page): def is_displayed(self): return self.participant.vars['Zuordnung'] == 'klassisch' and self.round_number == self.participant.vars['reihenfolge_klassisch']['M4'] def get_timeout_seconds(self): return self.player.dauer_phase_4*60 # Seiten für agile Prpjektplanung + class erste_Sprintplanung(Page): form_model = 'player' form_fields = ['modul_1', 'modul_2', 'modul_3', 'modul_4'] def is_displayed(self): return self.participant.vars['Zuordnung'] == 'agil' # Prüfen, ob mindestens ein Modul zur bearbeitung ausgewählt wurde def error_message(self, values): if values['modul_1'] == 'im folgenden Sprint nicht bearbeiten' and values['modul_2'] == 'im folgenden Sprint nicht bearbeiten' and values['modul_3'] == 'im folgenden Sprint nicht bearbeiten' and values['modul_4'] == 'im folgenden Sprint nicht bearbeiten': return 'Du musst mindestens ein Modul auswählen' def before_next_page(self): if self.player.modul_1 == 'im folgenden Sprint bearbeiten': self.player.modul_1 = 'in Sprint 1 bearbeitet' if self.player.modul_2 == 'im folgenden Sprint bearbeiten': self.player.modul_2 = 'in Sprint 1 bearbeitet' if self.player.modul_3 == 'im folgenden Sprint bearbeiten': self.player.modul_3 = 'in Sprint 1 bearbeitet' if self.player.modul_4 == 'im folgenden Sprint bearbeiten': self.player.modul_4 = 'in Sprint 1 bearbeitet' timeout_seconds = 60 class zweite_Sprintplanung(Page): form_model = 'player' #dynamischer Input aller Felder, die noch nicht im vorherigen Sprint bearbeitet wurden def get_form_fields(self): if self.player.modul_1 == 'in Sprint 1 bearbeitet' and self.player.modul_2 == 'im folgenden Sprint nicht bearbeiten' and self.player.modul_3 == 'im folgenden Sprint nicht bearbeiten' and self.player.modul_4 == 'im folgenden Sprint nicht bearbeiten': return ['modul_2', 'modul_3', 'modul_4'] elif self.player.modul_2 == 'in Sprint 1 bearbeitet' and self.player.modul_1 == 'im folgenden Sprint nicht bearbeiten' and self.player.modul_3 == 'im folgenden Sprint nicht bearbeiten' and self.player.modul_4 == 'im folgenden Sprint nicht bearbeiten' : return ['modul_1', 'modul_3', 'modul_4'] elif self.player.modul_3 == 'in Sprint 1 bearbeitet' and self.player.modul_1 == 'im folgenden Sprint nicht bearbeiten' and self.player.modul_2 == 'im folgenden Sprint nicht bearbeiten' and self.player.modul_4 == 'im folgenden Sprint nicht bearbeiten': return ['modul_1', 'modul_2', 'modul_4'] elif self.player.modul_4 == 'in Sprint 1 bearbeitet' and self.player.modul_1 == 'im folgenden Sprint nicht bearbeiten' and self.player.modul_2 == 'im folgenden Sprint nicht bearbeiten' and self.player.modul_3 == 'im folgenden Sprint nicht bearbeiten': return ['modul_1', 'modul_2', 'modul_3'] elif self.player.modul_1 and self.player.modul_2 == 'in Sprint 1 bearbeitet' and self.player.modul_3 == 'im folgenden Sprint nicht bearbeiten' and self.player.modul_4 == 'im folgenden Sprint nicht bearbeiten': return ['modul_3', 'modul_4'] elif self.player.modul_1 and self.player.modul_3 == 'in Sprint 1 bearbeitet' and self.player.modul_2 == 'im folgenden Sprint nicht bearbeiten' and self.player.modul_4 == 'im folgenden Sprint nicht bearbeiten': return ['modul_2', 'modul_4'] elif self.player.modul_1 and self.player.modul_4 == 'in Sprint 1 bearbeitet' and self.player.modul_2 == 'im folgenden Sprint nicht bearbeiten' and self.player.modul_3 == 'im folgenden Sprint nicht bearbeiten': return ['modul_2', 'modul_3'] elif self.player.modul_2 and self.player.modul_3 == 'in Sprint 1 bearbeitet' and self.player.modul_1 == 'im folgenden Sprint nicht bearbeiten' and self.player.modul_4 == 'im folgenden Sprint nicht bearbeiten': return ['modul_1', 'modul_4'] elif self.player.modul_2 and self.player.modul_4 == 'in Sprint 1 bearbeitet' and self.player.modul_1 == 'im folgenden Sprint nicht bearbeiten' and self.player.modul_3 == 'im folgenden Sprint nicht bearbeiten': return ['modul_1', 'modul_3'] elif self.player.modul_3 and self.player.modul_4 == 'in Sprint 1 bearbeitet' and self.player.modul_2 == 'im folgenden Sprint nicht bearbeiten' and self.player.modul_1 == 'im folgenden Sprint nicht bearbeiten': return ['modul_1', 'modul_2'] elif self.player.modul_1 and self.player.modul_2 and self.player.modul_3 == 'in Sprint 1 bearbeitet' and self.player.modul_4 == 'im folgenden Sprint nicht bearbeiten': return ['modul_4'] elif self.player.modul_1 and self.player.modul_2 and self.player.modul_4 == 'in Sprint 1 bearbeitet' and self.player.modul_3 == 'im folgenden Sprint nicht bearbeiten': return ['modul_3'] elif self.player.modul_1 and self.player.modul_3 and self.player.modul_4 == 'in Sprint 1 bearbeitet' and self.player.modul_2 == 'im folgenden Sprint nicht bearbeiten': return ['modul_2'] elif self.player.modul_2 and self.player.modul_3 and self.player.modul_4 == 'in Sprint 1 bearbeitet' and self.player.modul_1 == 'im folgenden Sprint nicht bearbeiten': return ['modul_1'] def is_displayed(self): return self.participant.vars['Zuordnung'] == 'agil' def before_next_page(self): if self.player.modul_1 == 'im folgenden Sprint bearbeiten': self.player.modul_1 = 'in Sprint 2 bearbeitet' if self.player.modul_2 == 'im folgenden Sprint bearbeiten': self.player.modul_2 = 'in Sprint 2 bearbeitet' if self.player.modul_3 == 'im folgenden Sprint bearbeiten': self.player.modul_3 = 'in Sprint 2 bearbeitet' if self.player.modul_4 == 'im folgenden Sprint bearbeiten': self.player.modul_4 = 'in Sprint 2 bearbeitet' timeout_seconds = 60 class dritte_Sprintplanung(Page): form_model = 'player' # dynamischer Input aller Felder, die noch nicht im vorherigen Sprint bearbeitet wurden def get_form_fields(self): if (self.player.modul_1 == 'in Sprint 1 bearbeitet' or self.player.modul_1 == 'in Sprint 2 bearbeitet') and self.player.modul_2 == 'im folgenden Sprint nicht bearbeiten' and self.player.modul_3 == 'im folgenden Sprint nicht bearbeiten' and self.player.modul_4 == 'im folgenden Sprint nicht bearbeiten': return ['modul_2', 'modul_3', 'modul_4'] elif (self.player.modul_2 == 'in Sprint 1 bearbeitet' or self.player.modul_2 == 'in Sprint 2 bearbeitet') and self.player.modul_1 == 'im folgenden Sprint nicht bearbeiten' and self.player.modul_3 == 'im folgenden Sprint nicht bearbeiten' and self.player.modul_4 == 'im folgenden Sprint nicht bearbeiten' : return ['modul_1', 'modul_3', 'modul_4'] elif (self.player.modul_3 == 'in Sprint 1 bearbeitet' or self.player.modul_3 == 'in Sprint 2 bearbeitet') and self.player.modul_1 == 'im folgenden Sprint nicht bearbeiten' and self.player.modul_2 == 'im folgenden Sprint nicht bearbeiten' and self.player.modul_4 == 'im folgenden Sprint nicht bearbeiten': return ['modul_1', 'modul_2', 'modul_4'] elif (self.player.modul_3 == 'in Sprint 1 bearbeitet' or self.player.modul_3 == 'in Sprint 2 bearbeitet') and self.player.modul_1 == 'im folgenden Sprint nicht bearbeiten' and self.player.modul_2 == 'im folgenden Sprint nicht bearbeiten' and self.player.modul_3 == 'im folgenden Sprint nicht bearbeiten': return ['modul_1', 'modul_2', 'modul_3'] elif ((self.player.modul_1 and self.player.modul_2 == 'in Sprint 1 bearbeitet') or (self.player.modul_1 and self.player.modul_2 == 'in Sprint 2 bearbeitet')) and self.player.modul_3 == 'im folgenden Sprint nicht bearbeiten' and self.player.modul_4 == 'im folgenden Sprint nicht bearbeiten': return ['modul_3', 'modul_4'] elif ((self.player.modul_1 and self.player.modul_3 == 'in Sprint 1 bearbeitet') or (self.player.modul_1 and self.player.modul_3 == 'in Sprint 2 bearbeitet')) and self.player.modul_2 == 'im folgenden Sprint nicht bearbeiten' and self.player.modul_4 == 'im folgenden Sprint nicht bearbeiten': return ['modul_2', 'modul_4'] elif ((self.player.modul_1 and self.player.modul_4 == 'in Sprint 1 bearbeitet') or (self.player.modul_1 and self.player.modul_4 == 'in Sprint 2 bearbeitet')) and self.player.modul_2 == 'im folgenden Sprint nicht bearbeiten' and self.player.modul_3 == 'im folgenden Sprint nicht bearbeiten': return ['modul_2', 'modul_3'] elif ((self.player.modul_2 and self.player.modul_3 == 'in Sprint 1 bearbeitet') or (self.player.modul_2 and self.player.modul_3 == 'in Sprint 2 bearbeitet')) and self.player.modul_1 == 'im folgenden Sprint nicht bearbeiten' and self.player.modul_4 == 'im folgenden Sprint nicht bearbeiten': return ['modul_1', 'modul_4'] elif ((self.player.modul_2 and self.player.modul_4 == 'in Sprint 1 bearbeitet') or (self.player.modul_2 and self.player.modul_4 == 'in Sprint 2 bearbeitet')) and self.player.modul_1 == 'im folgenden Sprint nicht bearbeiten' and self.player.modul_3 == 'im folgenden Sprint nicht bearbeiten': return ['modul_1', 'modul_3'] elif ((self.player.modul_3 and self.player.modul_4 == 'in Sprint 1 bearbeitet') or (self.player.modul_3 and self.player.modul_4 == 'in Sprint 2 bearbeitet')) and self.player.modul_2 == 'im folgenden Sprint nicht bearbeiten' and self.player.modul_1 == 'im folgenden Sprint nicht bearbeiten': return ['modul_1', 'modul_2'] elif ((self.player.modul_1 and self.player.modul_2 and self.player.modul_3 == 'in Sprint 1 bearbeitet') or (self.player.modul_1 and self.player.modul_2 and self.player.modul_3 == 'in Sprint 2 bearbeitet')) and self.player.modul_4 == 'im folgenden Sprint nicht bearbeiten': return ['modul_4'] elif ((self.player.modul_1 and self.player.modul_2 and self.player.modul_4 == 'in Sprint 1 bearbeitet') or (self.player.modul_1 and self.player.modul_2 and self.player.modul_4 == 'in Sprint 2 bearbeitet')) and self.player.modul_3 == 'im folgenden Sprint nicht bearbeiten': return ['modul_3'] elif ((self.player.modul_1 and self.player.modul_3 and self.player.modul_4 == 'in Sprint 1 bearbeitet') or (self.player.modul_1 and self.player.modul_3 and self.player.modul_4 == 'in Sprint 2 bearbeitet')) and self.player.modul_2 == 'im folgenden Sprint nicht bearbeiten': return ['modul_2'] elif ((self.player.modul_2 and self.player.modul_3 and self.player.modul_4 == 'in Sprint 1 bearbeitet') or (self.player.modul_2 and self.player.modul_3 and self.player.modul_4 == 'in Sprint 2 bearbeitet')) and self.player.modul_1 == 'im folgenden Sprint nicht bearbeiten': return ['modul_1'] def is_displayed(self): return self.participant.vars['Zuordnung'] == 'agil' def before_next_page(self): if self.player.modul_1 == 'im folgenden Sprint bearbeiten': self.player.modul_1 = 'in Sprint 3 bearbeitet' if self.player.modul_2 == 'im folgenden Sprint bearbeiten': self.player.modul_2 = 'in Sprint 3 bearbeitet' if self.player.modul_3 == 'im folgenden Sprint bearbeiten': self.player.modul_3 = 'in Sprint 3 bearbeitet' if self.player.modul_4 == 'im folgenden Sprint bearbeiten': self.player.modul_4 = 'in Sprint 3 bearbeitet' timeout_seconds = 60 class erste_Sprintumsetzung(Page): timeout_seconds = 180 def is_displayed(self): return self.participant.vars['Zuordnung'] == 'agil' class zweite_Sprintumsetzung(Page): timeout_seconds = 180 def is_displayed(self): return self.participant.vars['Zuordnung'] == 'agil' class dritte_Sprintumsetzung(Page): timeout_seconds = 180 def is_displayed(self): return self.participant.vars['Zuordnung'] == 'agil' class Results(Page): pass page_sequence = [ Introduction, SpecificIntroduction, erste_Sprintplanung, erste_Sprintumsetzung, zweite_Sprintplanung, zweite_Sprintumsetzung, dritte_Sprintplanung, dritte_Sprintumsetzung, Planungsphase_klassisch, Umsetzung_klassisch_1, Umsetzung_klassisch_2, Umsetzung_klassisch_3, Umsetzung_klassisch_4, Results ]