Пример #1
0
class Player(BasePlayer):
    maxScreens = models.DecimalField(max_digits=5, decimal_places=2)
    screenTime = models.DecimalField(max_digits=5, decimal_places=2)
    pointDistMin = models.DecimalField(max_digits=5, decimal_places=2)
    pointDistMax = models.DecimalField(max_digits=5, decimal_places=2)

    task_reward = models.DecimalField(max_digits=5, decimal_places=2)
    target_income = models.DecimalField(max_digits=5, decimal_places=2)
    # add timestamps
    time_GameInstructions = models.TextField(widget=widgets.HiddenInput(attrs={'id': 'arrive_time'}))
    time_PracticeTask = models.TextField(widget=widgets.HiddenInput(attrs={'id': 'arrive_time'}))
    time_SearchTask = models.TextField(widget=widgets.HiddenInput(attrs={'id': 'arrive_time'}))
Пример #2
0
class Player(BasePlayer):

    time_emo_quest_pg1 = models.TextField(widget=widgets.HiddenInput(attrs={'id': 'arrive_time'}))
    time_emo_quest_pg2 = models.TextField(widget=widgets.HiddenInput(attrs={'id': 'arrive_time'}))
    time_DoneQuestionnaire = models.TextField(widget=widgets.HiddenInput(attrs={'id': 'arrive_time'}))

    for i in range(len(Constants.emo_list)):
        temp = Constants.emo_list[i]
        locals()['{}'.format(temp)] = models.DecimalField(widget=widgets.HiddenInput(),
                                                          max_digits=3,
                                                          decimal_places=1,
                                                          min=1,
                                                          max=7)
Пример #3
0
class Player(BasePlayer):

    time_eyes_instructions = models.TextField(widget=widgets.HiddenInput(
        attrs={'id': 'arrive_time'}))
    time_Question = models.TextField(widget=widgets.HiddenInput(
        attrs={'id': 'arrive_time'}))

    question_id = models.PositiveIntegerField()
    question = models.CharField()
    solution = models.CharField()
    submitted_answer = models.CharField(widget=widgets.RadioSelect())
    is_correct = models.BooleanField()

    def current_question(self):
        return self.session.vars['questions'][self.round_number - 1]

    def check_correct(self):
        self.is_correct = self.submitted_answer == self.solution
Пример #4
0
class Player(BasePlayer):
    def save_decision(self):
        self.participant.vars['step3_decisions'].append(self.decision)

    def delete_two_snacks(self):
        if len(self.participant.vars["step3_list_of_pairs_to_show"]) >= 2:
            self.participant.vars["step3_list_of_pairs_to_show"].pop(0)

    def count_decisions(self):
        self.participant.vars['decision_count'] += 1


    #### DATA-fields
    # die zwei Snacks, zwischen denen sich der Teilnehmer entscheiden muss
    offer_1 = models.StringField(widget=widgets.HiddenInput(), verbose_name='')
    offer_2 = models.StringField(widget=widgets.HiddenInput(), verbose_name='')
    # der Snack, für den sich der Teilnehmer entscheidet
    decision = models.StringField()
    # Treatment-Gruppe des Teilnehmers
    treatment = models.StringField()
Пример #5
0
class Player(BasePlayer):
    def save_decision(self):
        self.participant.vars['step2_decisions'].append(self.decision)

    def delete_two_snacks(self):
        if len(self.participant.vars["step2_list_of_pairs_to_show"]) >= 2:
            self.participant.vars["step2_list_of_pairs_to_show"].pop(0)

    def count_decisions(self):
        self.participant.vars['decision_count'] += 1

    def reset_decision_count(self):
        self.participant.vars['decision_count'] = 1

    def set_healthier_as_default(self, snack1, snack2):
        # TO DO: exception falls snack nicht in Liste ist (sollte eigentlich nicht passieren)
        # The method index() returns the lowest index in list that obj appears. --> gives position of snack in that list
        if Constants.healthy_list.index(snack1) < Constants.healthy_list.index(
                snack2):
            return 'checked="checked"'
        else:
            return ''

    #### DATA-fields
    # Kontrollfragen - dem Experimentator wird mit "HILFE" eine falsche Antwort signalisiert
    #control_4 = models.StringField(verbose_name="Kotrollfrage 4:", choices=[['ok', 'Ja'], ['HILFE', 'Nein']], widget=widgets.RadioSelect())
    #control_5 = models.StringField(verbose_name="Kotrollfrage 5:", choices=[['ok', 'Ja'], ['HILFE', 'Nein']], widget=widgets.RadioSelect())
    #control_6 = models.StringField(verbose_name="Kotrollfrage 6:", choices=[['ok', 'Ja'], ['HILFE', 'Nein']], widget=widgets.RadioSelect())
    # die zwei Snacks, zwischen denen sich der Teilnehmer entscheiden muss
    offer_1 = models.StringField(widget=widgets.HiddenInput(), verbose_name='')
    offer_2 = models.StringField(widget=widgets.HiddenInput(), verbose_name='')
    # der Snack, der als default gesetzt wurde
    default = models.StringField(widget=widgets.HiddenInput(), verbose_name='')
    # der Snack, für den sich der Teilnehmer entscheidet
    decision = models.StringField()
    # Treatment-Gruppe des Teilnehmers
    treatment = models.StringField(widget=widgets.HiddenInput(),
                                   verbose_name='')
Пример #6
0
class Player(BasePlayer):
    def set_payoffs_generic(self):
        if self.round_number == 5:
            self.payoff = 2 * (Constants.endowment - self.contribution + Constants.multiplier * self.contribution / Constants.players_per_group)
        elif self.round_number == 6:
            self.payoff = 2 * (Constants.endowment - self.contribution + Constants.multiplier * (self.contribution + 5) / Constants.players_per_group)
        elif self.round_number == 7:
            self.payoff = 2 * (Constants.endowment - self.contribution + Constants.multiplier * (self.contribution + 10) / Constants.players_per_group)
        elif self.round_number == 8:
            self.payoff = 2 * (Constants.endowment - self.contribution + Constants.multiplier * (self.contribution + 15) / Constants.players_per_group)


    def set_final_payoff(self):
        # randomly choose which round to consider for payoff
        pay_round = random.choice(list(range(0, 8)))
        self.participant.vars['payround'] = pay_round + 1
        self.payround = pay_round + 1

        pay_round_payoff = [p.payoff for p in self.in_all_rounds()][pay_round]
        self.participant.vars['pay_round_payoff'] = pay_round_payoff

        dictator_share = int(self.participant.vars['dictator_share'])
        dictator_gift = int(self.participant.vars['dictator_gift'])
        final_pay = pay_round_payoff + dictator_share + dictator_gift
        self.participant.vars['finalpay'] = final_pay
        self.finalPay = final_pay


    # number of coins put into the mainpot
    contribution = models.FloatField()
    # record of clicking the up (u) and down (d) arrows
    distPattern = models.StringField(widget=widgets.HiddenInput(), verbose_name='')
    # number of coins payed out at the end
    finalPay = models.CurrencyField(widget=widgets.HiddenInput(), verbose_name='')
    # which treatement of the game is played
    gameTreatment = models.StringField(widget=widgets.HiddenInput(), verbose_name='')
    # gender of the participant
    gender = models.StringField(widget=widgets.HiddenInput(), verbose_name='')
    # unique identifier
    partLabel = models.StringField(widget=widgets.HiddenInput(), verbose_name='')
    # number of round decided for the final payment
    payround = models.FloatField(widget=widgets.HiddenInput(), verbose_name='')
    # ID (number) given to the player at start
    playerID = models.StringField(widget=widgets.HiddenInput(), verbose_name='')
    # yes/no whether the player understood the instructions
    understood = models.StringField(widget=widgets.HiddenInput(), verbose_name='')
Пример #7
0
class Player(BasePlayer):
    #Acá el usuario escribe si decide o no destruir
    destroy = models.BooleanField(
        label="Por favor piense cuidadosamente su decisión.")

    belief = models.BooleanField(
        label="Mi expectativa es:",
        choices=
        [  #Estas opciones hacen que los jugadores vean una string, pero que su respuesta se guarde como True o False
            [True, " que la otra persona decidió reducir mi dotación inicial"],
            [
                False,
                "que la otra persona decidió dejar mi dotación inicial tal y como está"
            ]
        ])

    #agregar si el belief es correcto
    belief_is_correct = models.BooleanField()

    was_destroyed = models.BooleanField(widget=widgets.HiddenInput(
    ))  #este widget sirve para ocultar en form.fields =

    def report_joy(self):
        self.participant.vars['destroy'] = self.destroy
        self.participant.vars['belief'] = self.belief

    belief_shock = models.IntegerField(
        label=
        '¿Cuál de los dos eventos posibles que se podían enfrentar en la primera parte de la actividad cree usted que el\
        participante con el que interactuó enfrentó?',
        choices=
        [(1,
          'Creo que sus ganancias acumuladas no se vieron afectadas de ninguna manera'
          ),
         (2, 'Creo que el 80% de sus ganancias acumuladas fueron destruidas')])

    belief_shock_is_correct = models.BooleanField()
Пример #8
0
class Player(BasePlayer):

    time_batson1 = models.TextField(widget=widgets.HiddenInput(attrs={'id': 'arrive_time'}))
    time_batson2 = models.TextField(widget=widgets.HiddenInput(attrs={'id': 'arrive_time'}))
    '''
Пример #9
0
class Player(BasePlayer):
    def unfill_snack_list(self):
        ''' entferne erste Index-Zahl aus Teilnehmer-Snack-Liste
        '''
        self.participant.vars['num_snacks'].pop(0)

    def fill_BDM_dict(self):
        # key: abgefragter Snack
        # value: willingness-to-pay
        if self.slider_value == "":
            # Now define the pairs that we want to show participants in step 2 and 3
            # Idea: Taking a random subset of all possible pairs for each participant
            # self.participant.vars['num_snacks'] sind indexzahlen, die von 0 bis zu num_snacks-1 läuft,
            # wobei bei jeder runde immer die erste Indexzahl weggenommen wird, sodass self.participant.vars['num_snacks'][0]
            # immer das nächste Gut ist. [Constants.list_snacks[self.participant.vars['num_snacks'][0]] gibt somit immer den Namen des nächsten Guts
            # Dadurch dass es ein dictionary ist, wird der BDM value immer an die Seite des entsprechenden Guts geschrieben
            self.participant.vars['BDM'][Constants.list_snacks[
                self.participant.vars['num_snacks'][0]]] = '0'
        else:
            self.participant.vars['BDM'][Constants.list_snacks[
                self.participant.vars['num_snacks'][0]]] = self.slider_value

    def pick_pairs_to_show(self):
        step2_list_of_pairs_to_show = []
        # Shuffling the list of all possible pairs
        shuffled_all_possible_pairs_step2 = Constants.list_of_all_pairs.copy()
        random.shuffle(shuffled_all_possible_pairs_step2)
        # Now taking the first x pairs of the list of all possible tuple pairs,
        #   where x is number of decisions for step 2 that is defines in Constants.
        # Remember, die index 0:2 goes 0,1 (excluding 2)
        for random_pair in shuffled_all_possible_pairs_step2[
                0:Constants.num_decisions_step2]:
            step2_list_of_pairs_to_show.append(random_pair)

        self.participant.vars[
            'step2_list_of_pairs_to_show'] = step2_list_of_pairs_to_show

        # Now doing the same for step 3 --> Taking another random subset
        step3_list_of_pairs_to_show = []
        shuffled_all_possible_pairs_step3 = Constants.list_of_all_pairs.copy()
        random.shuffle(shuffled_all_possible_pairs_step3)
        # Now taking the first x pairs, i.e. the Number of decisions for step 2
        for random_pair in shuffled_all_possible_pairs_step3[
                0:Constants.num_decisions_step3]:
            step3_list_of_pairs_to_show.append(random_pair)

        self.participant.vars[
            'step3_list_of_pairs_to_show'] = step3_list_of_pairs_to_show

        # print('List of pairs to show for participant ', self.id, ' is:', step2_list_of_pairs_to_show, 'in Step 2 and ',
        #      step3_list_of_pairs_to_show, 'in Step 3')

    #### DATA-fields:
    # Kontrollfragen - dem Experimentator wird mit "HILFE" eine falsche Antwort signalisiert
    ''' auskommentiert: Kontrollfragen werden stattdessen händisch gemacht
    control_1 = models.StringField(verbose_name="Welche Ihrer Entscheidungen sind für Ihre Auszahlung relevant?",
    choices=[   ['HILFE', 'Jede Entscheidung zählt.'],
                ['HILFE', 'Eine der Entscheidungen in Stufe 1 wird zufällig zur Auszahlung ausgewählt.'],
                ['ok', 'Eine der Entscheidungen aus einer der vier Stufen des Experiments wird zufällig zur Auszahlung ausgewählt.']],
    widget=widgets.RadioSelect())
    control_2 = models.StringField(verbose_name="Wenn ich immer eine Zahlungsbereitschaft von 0 Euro angebe und Stufe 1 oder 4 zur Auszahlung ausgewählt wird, erhalte ich eine garantierte Auszahlung von 5 Euro.", choices=[['ok', 'korrekt'], ['HILFE', 'nicht korrekt']], widget=widgets.RadioSelect())
    control_3 = models.StringField(verbose_name="Wenn eine der Stufen 2 oder 3 zur Auszahlung ausgewählt wird, erhalte ich dennoch die garantierte Auszahlung von 5 Euro aus Stufe 1 oder 4.", choices=[['HILFE', 'korrekt'], ['ok', 'nicht korrekt']], widget=widgets.RadioSelect())
    control_4 = models.StringField(verbose_name="Ich erwerbe maximal ein Gut.", choices=[['ok', 'korrekt'], ['HILFE', 'nicht korrekt']], widget=widgets.RadioSelect())
    control_5 = models.StringField(verbose_name="Indem ich eine niedrigere Zahlungsbereitschaft angebe, kann ich einen niedrigeren Preis erhalten, als wenn ich meine wahre Zahlungsbereitschaft angeben würde.", choices=[['HILFE', 'korrekt'], ['ok', 'nicht korrekt']], widget=widgets.RadioSelect())
    control_6 = models.StringField(verbose_name="Indem ich eine niedrigere Zahlungsbereitschaft angebe, kann ich nicht beeinflussen, welchen Preis ich zahle wenn ich das Gut kaufe, da der Preis zufällig bestimmt wird. Ich zahle diesen zufällig gezogenen Preis nur, falls er nicht höher als meine Zahlungsbereitschaft ist.", choices=[['ok', 'korrekt'], ['HILFE', 'nicht korrekt']], widget=widgets.RadioSelect())
    control_7 = models.StringField(verbose_name="Indem ich eine niedrigere Zahlungsbereitschaft angebe, kann es passieren, dass der zufällig gezogene Preis oberhalb dieser angegebenen, aber unterhalb meiner tatsächlichen Zahlungsbereitschaft liegt. Ich würde dann das Gut nicht bekommen, obwohl ich es zu einem Preis hätte kaufen können, der unter meiner tatsächlichen Zahlungsbereitschaft liegt.", choices=[['ok', 'korrekt'], ['HILFE', 'nicht korrekt']], widget=widgets.RadioSelect())
    '''
    # Label des PCs
    p_label = models.StringField(widget=widgets.HiddenInput(), verbose_name='')
    # was der Teilnehmer mit dem Schieberegler wählt
    slider_value = models.StringField(widget=widgets.Slider())
    # welchen Snack der Teilnehmer gerade bewertet
    rated_snack = models.StringField(widget=widgets.HiddenInput(),
                                     verbose_name='')
    # Treatment variable
    treatment = models.StringField(widget=widgets.HiddenInput(),
                                   verbose_name='')
Пример #10
0
class Player(BasePlayer):
    time_InitialCover = models.TextField(widget=widgets.HiddenInput(
        attrs={'id': 'arrive_time'}))
Пример #11
0
class Player(BasePlayer):
    # define vars
    endowment = models.CurrencyField()
    participation_fee = models.CurrencyField()

    task_income = models.CurrencyField()
    # before money is taken : endowment plus task income
    available_income0 = models.CurrencyField()
    # after money is taken : endowment plus task income
    number_of_questions = models.IntegerField(initial=6)
    fields_checked = models.IntegerField(initial=-1)
    available_income1 = models.CurrencyField()
    time_Instructions = models.TextField(
        widget=widgets.HiddenInput(attrs={'id': 'arrive_time'}))
    time_ControlQuestions = models.TextField(
        widget=widgets.HiddenInput(attrs={'id': 'arrive_time'}))
    time_InitialStage2 = models.TextField(
        widget=widgets.HiddenInput(attrs={'id': 'arrive_time'}))
    time_RolesIncome = models.TextField(
        widget=widgets.HiddenInput(attrs={'id': 'arrive_time'}))
    time_Results = models.TextField(
        widget=widgets.HiddenInput(attrs={'id': 'arrive_time'}))

        ## PTT EXPRESS INSTRUCTIONS FIELDS
    ctrlQ_anonymity = models.CharField(
        verbose_name='Once you are paired with another participant, '
                     'will you ever know the identity of this other participant?',
        choices=['Yes', 'No'],
        widget=widgets.RadioSelectHorizontal())

    ctrlQ_anonymity_err = models.CharField(
        choices=['Yes', 'No'])

    ctrlQ_who_transfers = models.CharField(
        verbose_name='Who decides how much to take from Role B’s account and deposit it into Role A’s account?',
        choices=['Role A', 'Role B', 'Role C', 'Role R', 'None of the above'],
        widget=widgets.RadioSelect())

    ctrlQ_who_transfers_err = models.CharField(
        choices=['Role A', 'Role B', 'Role C', 'Role R', 'None of the above'])

    ctrlQ_B_always_sends = models.CharField(
        verbose_name='Will the participant in Role B always send a message to the participant in Role A '
                     'that he/she is matched with?',
        choices=['Yes', 'No',
                 'It depends on his/her valuation for sending a message'],
        widget=widgets.RadioSelect())

    ctrlQ_B_always_sends_err = models.CharField(
        choices=['Yes', 'No', 'It depends on his/her valuation for sending a message'])

    ctrlQ_B_sends_message = models.CharField(
        verbose_name='Will the message written by Role B be sent in this case?',
        choices=['Yes', 'No'],
        widget=widgets.RadioSelectHorizontal())

    ctrlQ_B_sends_message_err = models.CharField(
        choices=['Yes', 'No'])

    # labels are going to be defying directly in ControlQuestions.html file instead of verbose
    ctrlQ_A_earnings = models.CharField(
        #        verbose_name='What are the final earnings for the participant in Role A? '
        #                     '(Hints: endowment plus task income equals $13.00. Do not include participation fee)',
        choices=['13.00 + X', '13.00 - X', '13.00 - X - Z', '13.00 - X + Z'],
        widget=widgets.RadioSelect())

    ctrlQ_A_earnings_err = models.CharField(
        choices=['13.00 + X', '13.00 - X', '13.00 - X - Z', '13.00 - X + Z'])

    ctrlQ_B_earnings = models.CharField(
        #        verbose_name='What are the final earnings for the participant in Role B? '
        #                    '(Hints: endowment plus task income equals $13.00. Do not include participation fee)',
        choices=['13.00 + X', '13.00 - X', '13.00 - X - Z', '13.00 - X + Z'],
        widget=widgets.RadioSelect())

    ctrlQ_B_earnings_err = models.CharField(
        choices=['13.00 + X', '13.00 - X', '13.00 - X - Z', '13.00 - X + Z'])


    #### SEARCH TASK FIELDS
    maxScreens = models.DecimalField(max_digits=5, decimal_places=2)
    screenTime = models.DecimalField(max_digits=5, decimal_places=2)
    pointDistMin = models.DecimalField(max_digits=5, decimal_places=2)
    pointDistMax = models.DecimalField(max_digits=5, decimal_places=2)

    task_reward = models.DecimalField(max_digits=5, decimal_places=2)
    target_income = models.DecimalField(max_digits=5, decimal_places=2)
    # add timestamps
    time_InitialStage1 = models.TextField(widget=widgets.HiddenInput(attrs={'id': 'arrive_time'}))
    time_GameInstructions = models.TextField(widget=widgets.HiddenInput(attrs={'id': 'arrive_time'}))
    time_PracticeTask = models.TextField(widget=widgets.HiddenInput(attrs={'id': 'arrive_time'}))
    time_SearchTask = models.TextField(widget=widgets.HiddenInput(attrs={'id': 'arrive_time'}))

    # roles
    def role(self):
        if self.id_in_group == 1 and self.group.treatment != 'TP-R':
            return 'A'
        if self.id_in_group == 2 and self.group.treatment != 'TP-R':
            return 'B'
        if self.group.treatment == 'TP-R':
            return 'R'
    def searchRole(self):
        if self.id_in_group == 1:
            return 'A'
        if self.id_in_group == 2:
            return 'B'

    # gets the id of partner if you are matched, and of him/herself if the player is the reader
    def get_partner(self):
        if self.role() == 'A' or self.role() == 'B':
            return self.get_others_in_group()[0]
        elif self.role() == 'R':
            # OJO reader gets as partner him/herself!
            return self.group.get_player_by_role('R')
Пример #12
0
class Group(BaseGroup):
    # define vars

    a_task_income = models.DecimalField(max_digits=5, decimal_places=2)
    b_task_income = models.CurrencyField()
    discard = models.BooleanField()

    treatment = models.TextField()
    value_type = models.TextField()
    elicitation_method = models.TextField()
    BDM_type = models.TextField()
    BDM_lolimit = models.TextField()
    BDM_uplimit = models.TextField()
    BDM_list_step = models.DecimalField(max_digits=5, decimal_places=2)
    SOP_price = models.CurrencyField()

    take_rate = models.DecimalField(
        widget=widgets.HiddenInput(), max_digits=5, decimal_places=0, min=0, max=100)
    expected_take_rate = models.DecimalField(
        widget=widgets.HiddenInput(), max_digits=5, decimal_places=0, min=0, max=100)
    money_taken = models.CurrencyField()
    want_send_message = models.CharField(
        choices=['Yes', 'No'], widget=widgets.RadioSelectHorizontal(), blank=True)

    b_message = models.TextField(blank=True, initial="")
    b_value = models.CurrencyField(min=c(0), blank=True)

    message_price = models.CurrencyField()
    msg_sent = models.BooleanField(initial=0)
    SOP_yes = models.CharField(
        choices=['Yes', 'No'], widget=widgets.RadioSelectHorizontal())

    price_list_size = models.IntegerField()
    # below code moved to before session starts
    '''
    # create BDM List prices - It generates as many variables list_price_{0} as Constants.max_price_list_size
    for i in range(0, Constants.max_price_list_size):
        locals()['list_price_{0}_yes'.format(i)] = models.CharField(
            choices=['Yes', 'No'], widget=widgets.RadioSelectHorizontal(), blank = True)

    # create BDM compensation amount - It generates as many variables list_price_{0} as Constants.max_price_list_size
    for i in range(0, Constants.max_price_list_size):
        locals()['list_compensation_{0}'.format(i)] = models.CharField(choices=[
               'Send message', 'Receive'], widget=widgets.RadioSelectHorizontal(), blank = True)
    '''
    # low tech solutions because the for loops wouldn't work
    list_price_0_yes = models.CharField(
        choices=['Yes', 'No'], widget=widgets.RadioSelectHorizontal(), blank=True)
    list_price_1_yes = models.CharField(
        choices=['Yes', 'No'], widget=widgets.RadioSelectHorizontal(), blank=True)
    list_price_2_yes = models.CharField(
        choices=['Yes', 'No'], widget=widgets.RadioSelectHorizontal(), blank=True)
    list_price_3_yes = models.CharField(
        choices=['Yes', 'No'], widget=widgets.RadioSelectHorizontal(), blank=True)
    list_price_4_yes = models.CharField(
        choices=['Yes', 'No'], widget=widgets.RadioSelectHorizontal(), blank=True)
    list_price_5_yes = models.CharField(
        choices=['Yes', 'No'], widget=widgets.RadioSelectHorizontal(), blank=True)
    list_price_6_yes = models.CharField(
        choices=['Yes', 'No'], widget=widgets.RadioSelectHorizontal(), blank=True)
    list_price_7_yes = models.CharField(
        choices=['Yes', 'No'], widget=widgets.RadioSelectHorizontal(), blank=True)
    list_price_8_yes = models.CharField(
        choices=['Yes', 'No'], widget=widgets.RadioSelectHorizontal(), blank=True)
    list_price_9_yes = models.CharField(
        choices=['Yes', 'No'], widget=widgets.RadioSelectHorizontal(), blank=True)
    list_price_10_yes = models.CharField(
        choices=['Yes', 'No'], widget=widgets.RadioSelectHorizontal(), blank=True)
    list_price_11_yes = models.CharField(
        choices=['Yes', 'No'], widget=widgets.RadioSelectHorizontal(), blank=True)
    list_price_12_yes = models.CharField(
        choices=['Yes', 'No'], widget=widgets.RadioSelectHorizontal(), blank=True)
    list_price_13_yes = models.CharField(
        choices=['Yes', 'No'], widget=widgets.RadioSelectHorizontal(), blank=True)
    list_price_14_yes = models.CharField(
        choices=['Yes', 'No'], widget=widgets.RadioSelectHorizontal(), blank=True)
    list_price_15_yes = models.CharField(
        choices=['Yes', 'No'], widget=widgets.RadioSelectHorizontal(), blank=True)
    list_price_16_yes = models.CharField(
        choices=['Yes', 'No'], widget=widgets.RadioSelectHorizontal(), blank=True)
    list_price_17_yes = models.CharField(
        choices=['Yes', 'No'], widget=widgets.RadioSelectHorizontal(), blank=True)
    list_price_18_yes = models.CharField(
        choices=['Yes', 'No'], widget=widgets.RadioSelectHorizontal(), blank=True)
    list_price_19_yes = models.CharField(
        choices=['Yes', 'No'], widget=widgets.RadioSelectHorizontal(), blank=True)

    list_compensation_0 = models.CharField(
        choices=['Send message', 'Receive'], widget=widgets.RadioSelectHorizontal(), blank=True)
    list_compensation_1 = models.CharField(
        choices=['Send message', 'Receive'], widget=widgets.RadioSelectHorizontal(), blank=True)
    list_compensation_2 = models.CharField(
        choices=['Send message', 'Receive'], widget=widgets.RadioSelectHorizontal(), blank=True)
    list_compensation_3 = models.CharField(
        choices=['Send message', 'Receive'], widget=widgets.RadioSelectHorizontal(), blank=True)
    list_compensation_4 = models.CharField(
        choices=['Send message', 'Receive'], widget=widgets.RadioSelectHorizontal(), blank=True)
    list_compensation_5 = models.CharField(
        choices=['Send message', 'Receive'], widget=widgets.RadioSelectHorizontal(), blank=True)
    list_compensation_6 = models.CharField(
        choices=['Send message', 'Receive'], widget=widgets.RadioSelectHorizontal(), blank=True)
    list_compensation_7 = models.CharField(
        choices=['Send message', 'Receive'], widget=widgets.RadioSelectHorizontal(), blank=True)
    list_compensation_8 = models.CharField(
        choices=['Send message', 'Receive'], widget=widgets.RadioSelectHorizontal(), blank=True)
    list_compensation_9 = models.CharField(
        choices=['Send message', 'Receive'], widget=widgets.RadioSelectHorizontal(), blank=True)
    list_compensation_10 = models.CharField(
        choices=['Send message', 'Receive'], widget=widgets.RadioSelectHorizontal(), blank=True)
    list_compensation_11 = models.CharField(
        choices=['Send message', 'Receive'], widget=widgets.RadioSelectHorizontal(), blank=True)
    list_compensation_12 = models.CharField(
        choices=['Send message', 'Receive'], widget=widgets.RadioSelectHorizontal(), blank=True)
    list_compensation_13 = models.CharField(
        choices=['Send message', 'Receive'], widget=widgets.RadioSelectHorizontal(), blank=True)
    list_compensation_14 = models.CharField(
        choices=['Send message', 'Receive'], widget=widgets.RadioSelectHorizontal(), blank=True)
    list_compensation_15 = models.CharField(
        choices=['Send message', 'Receive'], widget=widgets.RadioSelectHorizontal(), blank=True)
    list_compensation_16 = models.CharField(
        choices=['Send message', 'Receive'], widget=widgets.RadioSelectHorizontal(), blank=True)
    list_compensation_17 = models.CharField(
        choices=['Send message', 'Receive'], widget=widgets.RadioSelectHorizontal(), blank=True)
    list_compensation_18 = models.CharField(
        choices=['Send message', 'Receive'], widget=widgets.RadioSelectHorizontal(), blank=True)
    list_compensation_19 = models.CharField(
        choices=['Send message', 'Receive'], widget=widgets.RadioSelectHorizontal(), blank=True)

    # create vars for timestamps
    time_ADecides = models.TextField(
        widget=widgets.HiddenInput(attrs={'id': 'arrive_time'}))
    time_BPredicts = models.TextField(
        widget=widgets.HiddenInput(attrs={'id': 'arrive_time'}))
    time_ATakeResults = models.TextField(
        widget=widgets.HiddenInput(attrs={'id': 'arrive_time'}))
    # time_BTakeResults = models.TextField(widget=widgets.HiddenInput(attrs={'id': 'arrive_time'}))
    # time_WriteMessage = models.TextField(widget=widgets.HiddenInput(attrs={'id': 'arrive_time'}))

    time_AllFmNm = models.TextField(
        widget=widgets.HiddenInput(attrs={'id': 'arrive_time'}))
    time_AllBdmCont = models.TextField(
        widget=widgets.HiddenInput(attrs={'id': 'arrive_time'}))
    time_AllBdmList = models.TextField(
        widget=widgets.HiddenInput(attrs={'id': 'arrive_time'}))
    time_AllSOP = models.TextField(
        widget=widgets.HiddenInput(attrs={'id': 'arrive_time'}))

    # time_ElicitBdmCont = models.TextField(widget=widgets.HiddenInput(attrs={'id': 'arrive_time'}))
    # time_ElicitBdmList = models.TextField(widget=widgets.HiddenInput(attrs={'id': 'arrive_time'}))
    # time_ElicitSOP = models.TextField(widget=widgets.HiddenInput(attrs={'id': 'arrive_time'}))

    time_BdmResults = models.TextField(
        widget=widgets.HiddenInput(attrs={'id': 'arrive_time'}))
    time_DisplayMessageToA = models.TextField(
        widget=widgets.HiddenInput(attrs={'id': 'arrive_time'}))
    time_DisplayMessagesToR = models.TextField(
        widget=widgets.HiddenInput(attrs={'id': 'arrive_time'}))

    # this assigns payoff
    def set_payoffs(self):
        for p in self.get_players():
            if p.role() == 'A':
                p.payoff = p.available_income1
            elif p.role() == 'B':
                if p.group.treatment in ['FM', 'NM']:
                    p.payoff = p.available_income1
                elif p.group.treatment in ['DM', 'TP', 'DIS']:
                    p.payoff = p.available_income1 \
                        - (p.group.value_type == 'WTP') * p.group.msg_sent * p.group.message_price \
                        + (p.group.value_type == 'WTA') * \
                        (not p.group.msg_sent) * \
                        p.group.message_price
            elif p.role() == 'R':
                p.payoff = p.available_income0
Пример #13
0
class Player(BasePlayer):
    time_EmoQuestPage1 = models.TextField(widget=widgets.HiddenInput(attrs={'id': 'arrive_time'}))
    time_EmoQuestPage2 = models.TextField(widget=widgets.HiddenInput(attrs={'id': 'arrive_time'}))
Пример #14
0
class Player(BasePlayer):
    # define vars
    time_Instructions = models.TextField(widget=widgets.HiddenInput(
        attrs={'id': 'arrive_time'}))
    time_ControlQuestions = models.TextField(widget=widgets.HiddenInput(
        attrs={'id': 'arrive_time'}))

    endowment = models.CurrencyField()
    participation_fee = models.CurrencyField()
    # Check if this is the first time visiting the page by counting how many fields are validated
    # < 6 means this is the first time
    number_of_questions = models.IntegerField(initial=6)
    # Start at -1 because we iterate at the start of field validation
    fields_checked = models.IntegerField(initial=-1)

    # warning: falta timestamp

    # this if for control questions

    ctrlQ_anonymity = models.CharField(
        verbose_name='Once you are paired with another participant, '
        'will you ever know the identity of this other participant?',
        choices=['Yes', 'No'],
        widget=widgets.RadioSelectHorizontal())

    ctrlQ_anonymity_err = models.CharField(choices=['Yes', 'No'])

    ctrlQ_who_transfers = models.CharField(
        verbose_name=
        'Who decides how much to take from Role B’s account and deposit it into Role A’s account?',
        choices=['Role A', 'Role B', 'Role C', 'Role R', 'None of the above'],
        widget=widgets.RadioSelect())

    ctrlQ_who_transfers_err = models.CharField(
        choices=['Role A', 'Role B', 'Role C', 'Role R', 'None of the above'])

    ctrlQ_B_always_sends = models.CharField(
        verbose_name=
        'Will the participant in Role B always send a message to the participant in Role A '
        'that he/she is matched with?',
        choices=[
            'Yes', 'No',
            'It depends on his/her valuation for sending a message'
        ],
        widget=widgets.RadioSelect())

    ctrlQ_B_always_sends_err = models.CharField(choices=[
        'Yes', 'No', 'It depends on his/her valuation for sending a message'
    ])

    ctrlQ_B_sends_message = models.CharField(
        verbose_name='Will the message written by Role B be sent in this case?',
        choices=['Yes', 'No'],
        widget=widgets.RadioSelectHorizontal())

    ctrlQ_B_sends_message_err = models.CharField(choices=['Yes', 'No'])

    #labels are going to be defying directly in ControlQuestions.html file instead of verbose
    ctrlQ_A_earnings = models.CharField(
        #        verbose_name='What are the final earnings for the participant in Role A? '
        #                     '(Hints: endowment plus task income equals $13.00. Do not include participation fee)',
        choices=['13.00 + X', '13.00 - X', '13.00 - X - Z', '13.00 - X + Z'],
        widget=widgets.RadioSelect())

    ctrlQ_A_earnings_err = models.CharField(
        choices=['13.00 + X', '13.00 - X', '13.00 - X - Z', '13.00 - X + Z'])

    ctrlQ_B_earnings = models.CharField(
        #        verbose_name='What are the final earnings for the participant in Role B? '
        #                    '(Hints: endowment plus task income equals $13.00. Do not include participation fee)',
        choices=['13.00 + X', '13.00 - X', '13.00 - X - Z', '13.00 - X + Z'],
        widget=widgets.RadioSelect())

    ctrlQ_B_earnings_err = models.CharField(
        choices=['13.00 + X', '13.00 - X', '13.00 - X - Z', '13.00 - X + Z'])

    # roles
    def role(self):
        if self.id_in_group == 1 and self.group.treatment != 'TP-R':
            return 'A'
        if self.id_in_group == 2 and self.group.treatment != 'TP-R':
            return 'B'
        if self.group.treatment == 'TP-R':
            return 'R'
Пример #15
0
class Player(BasePlayer):
    def unfill_snack_list(self):
        ''' entferne erste Index-Zahl aus Teilnehmer-Snack-Liste
        '''
        self.participant.vars['num_snacks_Step4'].pop(0)

    def fill_BDM_dict(self):
        # nur notwendig für mögliche spätere Auszahlung
        rated_snack = self.slider_value
        # key: abgefragter Snack
        # value: willingness-to-pay
        if self.slider_value == "":
            self.participant.vars['WTPs_step_4'][Constants.list_snacks[
                self.participant.vars['num_snacks_Step4'][0]]] = '0'
        else:
            self.participant.vars['WTPs_step_4'][
                Constants.list_snacks[self.participant.vars['num_snacks_Step4']
                                      [0]]] = self.slider_value

    #### DATA-fields:
    # was der Teilnehmer mit dem Schieberegler wählt
    slider_value = models.StringField(widget=widgets.Slider())
    # welchen Snack der Teilnehmer gerade bewertet
    rated_snack = models.StringField(widget=widgets.HiddenInput(),
                                     verbose_name='')
    # zufälliger Snack, den der Teilnehmer "gewinnen" kann
    rand_snack = models.StringField(widget=widgets.HiddenInput(),
                                    verbose_name='')
    # zufälliger Preis des Snacks
    rand_price = models.StringField(widget=widgets.HiddenInput(),
                                    verbose_name='')
    # Label des PCs
    p_label = models.StringField(widget=widgets.HiddenInput(), verbose_name='')
    # Ausgewähter snack
    step_payout = models.StringField(widget=widgets.HiddenInput(),
                                     verbose_name='')
    # ausgegebener Snack, falls WTP größer gleich zufälliger Preis
    payout1_snack = models.StringField(widget=widgets.HiddenInput(),
                                       verbose_name='')
    # gesamte Geld-Auszahlung am Ende
    payout1_payoff = models.StringField(widget=widgets.HiddenInput(),
                                        verbose_name='')
    # ausgegebener Snack, falls WTP größer gleich zufälliger Preis
    payout2_snack = models.StringField(widget=widgets.HiddenInput(),
                                       verbose_name='')
    # gesamte Geld-Auszahlung am Ende
    payout2_payoff = models.StringField(widget=widgets.HiddenInput(),
                                        verbose_name='')
    # ausgegebener Snack, falls WTP größer gleich zufälliger Preis
    payout3_snack = models.StringField(widget=widgets.HiddenInput(),
                                       verbose_name='')
    # gesamte Geld-Auszahlung am Ende
    payout3_payoff = models.StringField(widget=widgets.HiddenInput(),
                                        verbose_name='')
    # ausgegebener Snack, falls WTP größer gleich zufälliger Preis
    payout4_snack = models.StringField(widget=widgets.HiddenInput(),
                                       verbose_name='')
    # gesamte Geld-Auszahlung am Ende
    payout4_payoff = models.StringField(widget=widgets.HiddenInput(),
                                        verbose_name='')
    # ausgegebener Snack, falls WTP größer gleich zufälliger Preis
    payout5_snack = models.StringField(widget=widgets.HiddenInput(),
                                       verbose_name='')
    # gesamte Geld-Auszahlung am Ende
    payout5_payoff = models.StringField(widget=widgets.HiddenInput(),
                                        verbose_name='')