from otree.api import ( models, widgets, BaseConstants, BaseSubsession, BaseGroup, BasePlayer, Currency as c, currency_range ) import math from otree.models import player author = 'Your name here' doc = """LTS R <--> S""" class Constants(BaseConstants): name_in_url = 'my_hello_q' players_per_group = None # players_per_group = 1 num_rounds = 21 # 21 3 test rounds, 17 experiments, 1 results only costs_wip = c(0) # costs for wip per period and order costs_fgi = c(4) # costs for fgi per period and order costs_bo = c(16) # costs for back-orders per period and orde profit = c(9) # profit for each order costs_order = c(1) # order release costs supplier_cap = 10 #supplier capacity # Test data tests = 1 test_round_length = 3 # round to play for each test round max_test_rounds = 15 # maximum number of test rounds test_timeout = 40 # seconds until test is over bgcolor_trial_phase = "hsla(120, 25.1%, 64.9%, 0.1)" bgcolor_prep_phase = "hsla(177, 69.5%, 41.2%, 0.1)" class Subsession(BaseSubsession): pass class Group(BaseGroup): pass class Player(BasePlayer): order = models.IntegerField(label="", max=99, min=0) # aktuelle Bestellung open_order = models.IntegerField(null=False, default=0) # Liefer Rückstand on_hand = models.IntegerField(null=False, default=0) # Lagerbestand wip = models.IntegerField(null=False, default=0) # Offene Bestellungen beim Lieferanten delivered_customer = models.IntegerField(null=False, default=0) #An Kunden ausgelifertm period = models.IntegerField(null=False, default=0) #Soielerperiode - wird nach Testphase wieder zurück gesetztn test_over = models.IntegerField(null=False, default=0) #gibt an ob spieler testphase abgeschlossen hat #POST SURVEY QUESTIONS risk = models.IntegerField(widget=widgets.RadioSelect, choices=[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]) #risiko bereitschaft importance_lt = models.IntegerField(widget=widgets.RadioSelect, choices=[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]) #leadtime importance_cap = models.IntegerField(widget=widgets.RadioSelect, choices=[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]) #capacity importance_demand = models.IntegerField(widget=widgets.RadioSelect, choices=[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]) #demand importance_costs = models.IntegerField(widget=widgets.RadioSelect, choices=[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]) #costs importance_supplier = models.IntegerField(widget=widgets.RadioSelect, choices=[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]) #info supplier treat = models.StringField() # save treatment vorname = models.StringField(label= 'Name') #player name nachname= models.StringField(label= 'Familienname') # player name email = models.StringField(label= 'E-mail') #player email adress lead_time = models.FloatField(default=1) # berechntet tatsaechliche LT estimated_lt1 = models.IntegerField(label="", min=1, max=99) # geschaetzte LT für kommende 4 perioden trust_in_lt = models.StringField(label="", default="") # save trust / y/n #trust_in_lt = models.StringField(widget=widgets.RadioSelect, choices=["Ja", "Nein"]) # info supplier #estimated_lt2 = models.IntegerField(label="", min=1, max=99) #estimated_lt3 = models.IntegerField(label="", min=1, max=99) #estimated_lt4 = models.IntegerField(label="", min=1, max=99) original_demand = ( #Kundennachfrage 3, 8, 15, # TEST 9, 3, 12, 12, 3, 12, 12, 12, 12, 9, 12, 6, 12, 12, 12, 3, 12, 12, 12, 3, 9, 6, 6, 9, 3, 9, # EXP DEMAND 15, 9, 6, 15, 6, 3, 12, 12, 3, 12, 12) # weiterführender demand def demand_method(self): self.participant.vars['demand'] = [ #Kundennachfrage 3, 8, 15, # TEST 9, 3, 12, 12, 3, 12, 12, 12, 12, 9, 12, 6, 12, 12, 12, 3, 12, 12, 12, 3, 9, 6, 6, 9, 3, 9, # EXP DEMAND 15, 9, 6, 15, 6, 3, 12, 12, 3, 12, 12] # weiterführender demand # C_osts c_wip = models.CurrencyField(default=0) # work in progress c_fgi = models.CurrencyField(default=0) # finished goods inventory c_bo = models.CurrencyField(default=0) # back order costs c_order = models.CurrencyField(default=0) # bestell kosten #CUM_ulated Costs cum_wip = models.CurrencyField(default=0) # work in process cum_fgi = models.CurrencyField(default=0) # finished goods inventory cum_bo = models.CurrencyField(default=0) # back order costs cum_order = models.CurrencyField(default=0) # bestell kosten #Umsatz & Gewinn round_payoff = models.CurrencyField(default=0) # runden Gewinn round_umsatz = models.CurrencyField(default=0) # runden Umsatz cum_umsatz = models.CurrencyField(default=0) # kum Umsatz