from django.db.models import F from otree.api import Currency as c, currency_range from . import models from ._builtin import Page, WaitPage from .models import Constants import random from random import shuffle import itertools from decimal import * def vars_for_all_templates(self): return { 'condition': self.participant.vars['condition'], } class IC(Page): form_model = models.Player form_fields = ['informed_consent'] def before_next_page(self): # See if that worker ID already appears in players, in which case they at least started the experiment mturk_check = models.Player.objects.filter( worker_id=self.participant.label) if not mturk_check: self.player.mturk_dupe = 0 else: self.player.mturk_dupe = 1 # Bring worker ID into player table/model for accessibility, which will be captured via the participant # label in the URL. Updating for this participant so that if they try again, they'll fail the dupe check. # Worker_Id has a default of 'e,' so for testing outside of MTurk just need to keep it at 'e' if there is no # participant label coming from the URL if not self.participant.label: self.player.worker_id = 'e' else: self.player.worker_id = self.participant.label # Also store condition in the player table just for ease of data analysis self.player.condition = self.participant.vars["condition"] class IC_Decline(Page): def is_displayed(self): return self.player.informed_consent == "No" class DuplicateWorker(Page): def is_displayed(self): return self.player.mturk_dupe == 1 class GenInstructions(Page): pass class TaskInstructions(Page): pass class Projects(Page): pass class PerformanceReports(Page): pass class Compensation(Page): pass class KnowledgeCheck(Page): form_model = models.Player def get_form_fields(self): if self.player.condition == 1: return ['kc1', 'kc2', 'kc3', 'kc4', 'kc5', 'kc6', 'kc7', 'kc8', 'kc9'] elif self.player.condition == 2: return ['kc1', 'kc2', 'kc3', 'kc4', 'kc5', 'kc6', 'kc7', 'kc8', 'kc9', 'kc10a'] elif self.player.condition == 3: return ['kc1', 'kc2', 'kc3', 'kc4', 'kc5', 'kc6', 'kc7', 'kc8', 'kc9', 'kc10b'] elif self.player.condition == 4: return ['kc1', 'kc2', 'kc3', 'kc4', 'kc5', 'kc6', 'kc7', 'kc8', 'kc9', 'kc10c'] elif self.player.condition == 5: return ['kc1', 'kc2', 'kc3', 'kc4', 'kc5', 'kc6', 'kc7', 'kc8', 'kc9', 'kc10d'] def before_next_page(self): # Might as well pick a pay period on the way in pay_choice = (1, 2, 3, 4) self.player.pay_period = random.choice(pay_choice) class ArrivalWait(WaitPage): #template_name = 'csr_rpi/CWaitPage.html' body_text = "Please wait briefly while the other Managers arrive..." title_text = "" class DecisionWait(WaitPage): #template_name = 'csr_rpi/CWaitPage.html' body_text = "Please wait briefly while the other Managers finish making their decisions..." title_text = "" class PracticePeriod(Page): form_model = models.Player form_fields = ['practice_decision_time', 'practice_dollars_kept', 'practice_dollars_invested', 'practice_local_weight', 'practice_state_weight', 'practice_national_weight'] def before_next_page(self): self.player.practice_impact_score = round(((self.player.practice_local_weight/100*2) + (self.player.practice_state_weight/100*3) + (self.player.practice_national_weight/100*6)), 1) self.player.practice_potential_return = \ round((self.player.practice_dollars_invested * self.player.practice_impact_score), 2) # Insert record in Rank table to determine overall group ranks in the Interim page... if self.player.condition == 2 or self.player.condition == 4: models.Rank.objects.create(period_number=0, type=1, group_id=self.player.group_id, player_id=self.player.id_in_group, value=self.player.practice_dollars_invested) if self.player.id_in_group == 1: models.Rank.objects.filter(period_number=0, type=1, group_id=self.player.group_id, player_id=self.player.id_in_group).update(label_for_1='You', label_for_2='Manager B', label_for_3='Manager B', label_for_4='Manager B', label_for_5='Manager B') elif self.player.id_in_group == 2: models.Rank.objects.filter(period_number=0, type=1, group_id=self.player.group_id, player_id=self.player.id_in_group).update(label_for_1='Manager B', label_for_2='You', label_for_3='Manager C', label_for_4='Manager C', label_for_5='Manager C') elif self.player.id_in_group == 3: models.Rank.objects.filter(period_number=0, type=1, group_id=self.player.group_id, player_id=self.player.id_in_group).update(label_for_1='Manager C', label_for_2='Manager C', label_for_3='You', label_for_4='Manager D', label_for_5='Manager D') elif self.player.id_in_group == 4: models.Rank.objects.filter(period_number=0, type=1, group_id=self.player.group_id, player_id=self.player.id_in_group).update(label_for_1='Manager D', label_for_2='Manager D', label_for_3='Manager D', label_for_4='You', label_for_5='Manager E') elif self.player.id_in_group == 5: models.Rank.objects.filter(period_number=0, type=1, group_id=self.player.group_id, player_id=self.player.id_in_group).update(label_for_1='Manager E', label_for_2='Manager E', label_for_3='Manager E', label_for_4='Manager E', label_for_5='You') if self.player.condition == 3 or self.player.condition == 4: models.Rank.objects.create(period_number=0, type=2, group_id=self.player.group_id, player_id=self.player.id_in_group, value=self.player.practice_impact_score) if self.player.id_in_group == 1: models.Rank.objects.filter(period_number=0, type=2, group_id=self.player.group_id, player_id=self.player.id_in_group).update(label_for_1='You', label_for_2='Manager B', label_for_3='Manager B', label_for_4='Manager B', label_for_5='Manager B') elif self.player.id_in_group == 2: models.Rank.objects.filter(period_number=0, type=2, group_id=self.player.group_id, player_id=self.player.id_in_group).update(label_for_1='Manager B', label_for_2='You', label_for_3='Manager C', label_for_4='Manager C', label_for_5='Manager C') elif self.player.id_in_group == 3: models.Rank.objects.filter(period_number=0, type=2, group_id=self.player.group_id, player_id=self.player.id_in_group).update(label_for_1='Manager C', label_for_2='Manager C', label_for_3='You', label_for_4='Manager D', label_for_5='Manager D') elif self.player.id_in_group == 4: models.Rank.objects.filter(period_number=0, type=2, group_id=self.player.group_id, player_id=self.player.id_in_group).update(label_for_1='Manager D', label_for_2='Manager D', label_for_3='Manager D', label_for_4='You', label_for_5='Manager E') elif self.player.id_in_group == 5: models.Rank.objects.filter(period_number=0, type=2, group_id=self.player.group_id, player_id=self.player.id_in_group).update(label_for_1='Manager E', label_for_2='Manager E', label_for_3='Manager E', label_for_4='Manager E', label_for_5='You') if self.player.condition == 5: models.Rank.objects.create(period_number=0, type=3, group_id=self.player.group_id, player_id=self.player.id_in_group, value=self.player.practice_potential_return) if self.player.id_in_group == 1: models.Rank.objects.filter(period_number=0, type=3, group_id=self.player.group_id, player_id=self.player.id_in_group).update(label_for_1='You', label_for_2='Manager B', label_for_3='Manager B', label_for_4='Manager B', label_for_5='Manager B') elif self.player.id_in_group == 2: models.Rank.objects.filter(period_number=0, type=3, group_id=self.player.group_id, player_id=self.player.id_in_group).update(label_for_1='Manager B', label_for_2='You', label_for_3='Manager C', label_for_4='Manager C', label_for_5='Manager C') elif self.player.id_in_group == 3: models.Rank.objects.filter(period_number=0, type=3, group_id=self.player.group_id, player_id=self.player.id_in_group).update(label_for_1='Manager C', label_for_2='Manager C', label_for_3='You', label_for_4='Manager D', label_for_5='Manager D') elif self.player.id_in_group == 4: models.Rank.objects.filter(period_number=0, type=3, group_id=self.player.group_id, player_id=self.player.id_in_group).update(label_for_1='Manager D', label_for_2='Manager D', label_for_3='Manager D', label_for_4='You', label_for_5='Manager E') elif self.player.id_in_group == 5: models.Rank.objects.filter(period_number=0, type=3, group_id=self.player.group_id, player_id=self.player.id_in_group).update(label_for_1='Manager E', label_for_2='Manager E', label_for_3='Manager E', label_for_4='Manager E', label_for_5='You') class PracticeInterim(Page): def before_next_page(self): # Only have to do this once for the group if self.player.id_in_group == 1: if self.player.condition == 2 or self.player.condition == 4: # Run django query to return ordered rank list. Then for each object in that queryset, run # insert into the Rank table. Then on the results page, I can loop through that queryset to print # the results. rank_list = models.Player.objects.filter(group_id=self.player.group_id).order_by('-practice_dollars_invested', 'id_in_group') models.Rank.objects.filter(period_number=0, type=1, group_id=self.player.group_id, player_id=rank_list[0].id_in_group).update(rank=1) models.Rank.objects.filter(period_number=0, type=1, group_id=self.player.group_id, player_id=rank_list[1].id_in_group).update(rank=2) models.Rank.objects.filter(period_number=0, type=1, group_id=self.player.group_id, player_id=rank_list[2].id_in_group).update(rank=3) models.Rank.objects.filter(period_number=0, type=1, group_id=self.player.group_id, player_id=rank_list[3].id_in_group).update(rank=4) models.Rank.objects.filter(period_number=0, type=1, group_id=self.player.group_id, player_id=rank_list[4].id_in_group).update(rank=5) if self.player.condition == 3 or self.player.condition == 4: rank_list = models.Player.objects.filter(group_id=self.player.group_id).order_by('-practice_impact_score', 'id_in_group') models.Rank.objects.filter(period_number=0, type=2, group_id=self.player.group_id, player_id=rank_list[0].id_in_group).update(rank=1) models.Rank.objects.filter(period_number=0, type=2, group_id=self.player.group_id, player_id=rank_list[1].id_in_group).update(rank=2) models.Rank.objects.filter(period_number=0, type=2, group_id=self.player.group_id, player_id=rank_list[2].id_in_group).update(rank=3) models.Rank.objects.filter(period_number=0, type=2, group_id=self.player.group_id, player_id=rank_list[3].id_in_group).update(rank=4) models.Rank.objects.filter(period_number=0, type=2, group_id=self.player.group_id, player_id=rank_list[4].id_in_group).update(rank=5) if self.player.condition == 5: rank_list = models.Player.objects.filter(group_id=self.player.group_id).order_by('-practice_potential_return', 'id_in_group') models.Rank.objects.filter(period_number=0, type=3, group_id=self.player.group_id, player_id=rank_list[0].id_in_group).update(rank=1) models.Rank.objects.filter(period_number=0, type=3, group_id=self.player.group_id, player_id=rank_list[1].id_in_group).update(rank=2) models.Rank.objects.filter(period_number=0, type=3, group_id=self.player.group_id, player_id=rank_list[2].id_in_group).update(rank=3) models.Rank.objects.filter(period_number=0, type=3, group_id=self.player.group_id, player_id=rank_list[3].id_in_group).update(rank=4) models.Rank.objects.filter(period_number=0, type=3, group_id=self.player.group_id, player_id=rank_list[4].id_in_group).update(rank=5) class PracticeResult(Page): def vars_for_template(self): if self.player.condition == 2: #Return rankings, but with label based on player's id in group to standardize B, C, D, E... if self.player.id_in_group == 1: return { 'dollar_rank': models.Rank.objects.filter(period_number=0, type=1, group_id=self.player.group_id ).order_by('rank').annotate(label=F('label_for_1')) } elif self.player.id_in_group == 2: return { 'dollar_rank': models.Rank.objects.filter(period_number=0, type=1, group_id=self.player.group_id ).order_by('rank').annotate(label=F('label_for_2')) } elif self.player.id_in_group == 3: return { 'dollar_rank': models.Rank.objects.filter(period_number=0, type=1, group_id=self.player.group_id ).order_by('rank').annotate(label=F('label_for_3')) } elif self.player.id_in_group == 4: return { 'dollar_rank': models.Rank.objects.filter(period_number=0, type=1, group_id=self.player.group_id ).order_by('rank').annotate(label=F('label_for_4')) } elif self.player.id_in_group == 5: return { 'dollar_rank': models.Rank.objects.filter(period_number=0, type=1, group_id=self.player.group_id ).order_by('rank').annotate(label=F('label_for_5')) } elif self.player.condition == 3: if self.player.id_in_group == 1: return { 'impact_rank': models.Rank.objects.filter(period_number=0, type=2, group_id=self.player.group_id ).order_by('rank').annotate(label=F('label_for_1')) } elif self.player.id_in_group == 2: return { 'impact_rank': models.Rank.objects.filter(period_number=0, type=2, group_id=self.player.group_id ).order_by('rank').annotate(label=F('label_for_2')) } elif self.player.id_in_group == 3: return { 'impact_rank': models.Rank.objects.filter(period_number=0, type=2, group_id=self.player.group_id ).order_by('rank').annotate(label=F('label_for_3')) } elif self.player.id_in_group == 4: return { 'impact_rank': models.Rank.objects.filter(period_number=0, type=2, group_id=self.player.group_id ).order_by('rank').annotate(label=F('label_for_4')) } elif self.player.id_in_group == 5: return { 'impact_rank': models.Rank.objects.filter(period_number=0, type=2, group_id=self.player.group_id ).order_by('rank').annotate(label=F('label_for_5')) } elif self.player.condition == 4: if self.player.id_in_group == 1: return { 'dollar_rank': models.Rank.objects.filter(period_number=0, type=1, group_id=self.player.group_id ).order_by('rank').annotate(label=F('label_for_1')), 'impact_rank': models.Rank.objects.filter(period_number=0, type=2, group_id=self.player.group_id ).order_by('rank').annotate(label=F('label_for_1')) } elif self.player.id_in_group == 2: return { 'dollar_rank': models.Rank.objects.filter(period_number=0, type=1, group_id=self.player.group_id ).order_by('rank').annotate(label=F('label_for_2')), 'impact_rank': models.Rank.objects.filter(period_number=0, type=2, group_id=self.player.group_id ).order_by('rank').annotate(label=F('label_for_2')) } elif self.player.id_in_group == 3: return { 'dollar_rank': models.Rank.objects.filter(period_number=0, type=1, group_id=self.player.group_id ).order_by('rank').annotate(label=F('label_for_3')), 'impact_rank': models.Rank.objects.filter(period_number=0, type=2, group_id=self.player.group_id ).order_by('rank').annotate(label=F('label_for_3')) } elif self.player.id_in_group == 4: return { 'dollar_rank': models.Rank.objects.filter(period_number=0, type=1, group_id=self.player.group_id ).order_by('rank').annotate(label=F('label_for_4')), 'impact_rank': models.Rank.objects.filter(period_number=0, type=2, group_id=self.player.group_id ).order_by('rank').annotate(label=F('label_for_4')) } elif self.player.id_in_group == 5: return { 'dollar_rank': models.Rank.objects.filter(period_number=0, type=1, group_id=self.player.group_id ).order_by('rank').annotate(label=F('label_for_5')), 'impact_rank': models.Rank.objects.filter(period_number=0, type=2, group_id=self.player.group_id ).order_by('rank').annotate(label=F('label_for_5')) } elif self.player.condition == 5: if self.player.id_in_group == 1: return { 'return_rank': models.Rank.objects.filter(period_number=0, type=3, group_id=self.player.group_id ).order_by('rank').annotate(label=F('label_for_1')) } elif self.player.id_in_group == 2: return { 'return_rank': models.Rank.objects.filter(period_number=0, type=3, group_id=self.player.group_id ).order_by('rank').annotate(label=F('label_for_2')) } elif self.player.id_in_group == 3: return { 'return_rank': models.Rank.objects.filter(period_number=0, type=3, group_id=self.player.group_id ).order_by('rank').annotate(label=F('label_for_3')) } elif self.player.id_in_group == 4: return { 'return_rank': models.Rank.objects.filter(period_number=0, type=3, group_id=self.player.group_id ).order_by('rank').annotate(label=F('label_for_4')) } elif self.player.id_in_group == 5: return { 'return_rank': models.Rank.objects.filter(period_number=0, type=3, group_id=self.player.group_id ).order_by('rank').annotate(label=F('label_for_5')) } def before_next_page(self): # Update player ranks for data purposes if self.player.condition == 2 or self.player.condition == 4: own_rank = models.Rank.objects.filter(group_id=self.player.group_id, player_id=self.player.id_in_group, period_number=0, type=1)[0] self.player.practice_dollar_rank = own_rank.rank if self.player.condition == 3 or self.player.condition == 4: own_rank = models.Rank.objects.filter(group_id=self.player.group_id, player_id=self.player.id_in_group, period_number=0, type=2)[0] self.player.practice_impact_rank = own_rank.rank if self.player.condition == 5: own_rank = models.Rank.objects.filter(group_id=self.player.group_id, player_id=self.player.id_in_group, period_number=0, type=3)[0] self.player.practice_return_rank = own_rank.rank class CharitySelection(Page): form_model = models.Player form_fields = ['charity_selection'] class Period1(Page): form_model = models.Player form_fields = ['p1_decision_time', 'p1_dollars_kept', 'p1_dollars_invested', 'p1_local_weight', 'p1_state_weight', 'p1_national_weight'] def before_next_page(self): self.player.running_dollars_invested = self.player.p1_dollars_invested self.player.running_impact_score = round(((self.player.p1_local_weight / 100 *2) + (self.player.p1_state_weight / 100 *3) + (self.player.p1_national_weight / 100 *6)), 1) self.player.running_potential_return = \ round((self.player.running_dollars_invested * self.player.running_impact_score), 2) # Insert record in Rank table to determine overall group ranks in the Interim page... if self.player.condition == 2 or self.player.condition == 4: models.Rank.objects.create(period_number=1, type=1, group_id=self.player.group_id, player_id=self.player.id_in_group, value=self.player.running_dollars_invested) if self.player.id_in_group == 1: models.Rank.objects.filter(period_number=1, type=1, group_id=self.player.group_id, player_id=self.player.id_in_group).update(label_for_1='You', label_for_2='Manager B', label_for_3='Manager B', label_for_4='Manager B', label_for_5='Manager B') elif self.player.id_in_group == 2: models.Rank.objects.filter(period_number=1, type=1, group_id=self.player.group_id, player_id=self.player.id_in_group).update(label_for_1='Manager B', label_for_2='You', label_for_3='Manager C', label_for_4='Manager C', label_for_5='Manager C') elif self.player.id_in_group == 3: models.Rank.objects.filter(period_number=1, type=1, group_id=self.player.group_id, player_id=self.player.id_in_group).update(label_for_1='Manager C', label_for_2='Manager C', label_for_3='You', label_for_4='Manager D', label_for_5='Manager D') elif self.player.id_in_group == 4: models.Rank.objects.filter(period_number=1, type=1, group_id=self.player.group_id, player_id=self.player.id_in_group).update(label_for_1='Manager D', label_for_2='Manager D', label_for_3='Manager D', label_for_4='You', label_for_5='Manager E') elif self.player.id_in_group == 5: models.Rank.objects.filter(period_number=1, type=1, group_id=self.player.group_id, player_id=self.player.id_in_group).update(label_for_1='Manager E', label_for_2='Manager E', label_for_3='Manager E', label_for_4='Manager E', label_for_5='You') if self.player.condition == 3 or self.player.condition == 4: models.Rank.objects.create(period_number=1, type=2, group_id=self.player.group_id, player_id=self.player.id_in_group, value=self.player.running_impact_score) if self.player.id_in_group == 1: models.Rank.objects.filter(period_number=1, type=2, group_id=self.player.group_id, player_id=self.player.id_in_group).update(label_for_1='You', label_for_2='Manager B', label_for_3='Manager B', label_for_4='Manager B', label_for_5='Manager B') elif self.player.id_in_group == 2: models.Rank.objects.filter(period_number=1, type=2, group_id=self.player.group_id, player_id=self.player.id_in_group).update(label_for_1='Manager B', label_for_2='You', label_for_3='Manager C', label_for_4='Manager C', label_for_5='Manager C') elif self.player.id_in_group == 3: models.Rank.objects.filter(period_number=1, type=2, group_id=self.player.group_id, player_id=self.player.id_in_group).update(label_for_1='Manager C', label_for_2='Manager C', label_for_3='You', label_for_4='Manager D', label_for_5='Manager D') elif self.player.id_in_group == 4: models.Rank.objects.filter(period_number=1, type=2, group_id=self.player.group_id, player_id=self.player.id_in_group).update(label_for_1='Manager D', label_for_2='Manager D', label_for_3='Manager D', label_for_4='You', label_for_5='Manager E') elif self.player.id_in_group == 5: models.Rank.objects.filter(period_number=1, type=2, group_id=self.player.group_id, player_id=self.player.id_in_group).update(label_for_1='Manager E', label_for_2='Manager E', label_for_3='Manager E', label_for_4='Manager E', label_for_5='You') if self.player.condition == 5: models.Rank.objects.create(period_number=1, type=3, group_id=self.player.group_id, player_id=self.player.id_in_group, value=self.player.running_potential_return) if self.player.id_in_group == 1: models.Rank.objects.filter(period_number=1, type=3, group_id=self.player.group_id, player_id=self.player.id_in_group).update(label_for_1='You', label_for_2='Manager B', label_for_3='Manager B', label_for_4='Manager B', label_for_5='Manager B') elif self.player.id_in_group == 2: models.Rank.objects.filter(period_number=1, type=3, group_id=self.player.group_id, player_id=self.player.id_in_group).update(label_for_1='Manager B', label_for_2='You', label_for_3='Manager C', label_for_4='Manager C', label_for_5='Manager C') elif self.player.id_in_group == 3: models.Rank.objects.filter(period_number=1, type=3, group_id=self.player.group_id, player_id=self.player.id_in_group).update(label_for_1='Manager C', label_for_2='Manager C', label_for_3='You', label_for_4='Manager D', label_for_5='Manager D') elif self.player.id_in_group == 4: models.Rank.objects.filter(period_number=1, type=3, group_id=self.player.group_id, player_id=self.player.id_in_group).update(label_for_1='Manager D', label_for_2='Manager D', label_for_3='Manager D', label_for_4='You', label_for_5='Manager E') elif self.player.id_in_group == 5: models.Rank.objects.filter(period_number=1, type=3, group_id=self.player.group_id, player_id=self.player.id_in_group).update(label_for_1='Manager E', label_for_2='Manager E', label_for_3='Manager E', label_for_4='Manager E', label_for_5='You') class P1Interim(Page): def before_next_page(self): # Only have to do this once for the group if self.player.id_in_group == 1: if self.player.condition == 2 or self.player.condition == 4: # Run django query to return ordered rank list. Then for each object in that queryset, run # insert into the Rank table. Then on the results page, I can loop through that queryset to print # the results. rank_list = models.Player.objects.filter(group_id=self.player.group_id).order_by('-running_dollars_invested', 'id_in_group') models.Rank.objects.filter(period_number=1, type=1, group_id=self.player.group_id, player_id=rank_list[0].id_in_group).update(rank=1) models.Rank.objects.filter(period_number=1, type=1, group_id=self.player.group_id, player_id=rank_list[1].id_in_group).update(rank=2) models.Rank.objects.filter(period_number=1, type=1, group_id=self.player.group_id, player_id=rank_list[2].id_in_group).update(rank=3) models.Rank.objects.filter(period_number=1, type=1, group_id=self.player.group_id, player_id=rank_list[3].id_in_group).update(rank=4) models.Rank.objects.filter(period_number=1, type=1, group_id=self.player.group_id, player_id=rank_list[4].id_in_group).update(rank=5) if self.player.condition == 3 or self.player.condition == 4: rank_list = models.Player.objects.filter(group_id=self.player.group_id).order_by('-running_impact_score', 'id_in_group') models.Rank.objects.filter(period_number=1, type=2, group_id=self.player.group_id, player_id=rank_list[0].id_in_group).update(rank=1) models.Rank.objects.filter(period_number=1, type=2, group_id=self.player.group_id, player_id=rank_list[1].id_in_group).update(rank=2) models.Rank.objects.filter(period_number=1, type=2, group_id=self.player.group_id, player_id=rank_list[2].id_in_group).update(rank=3) models.Rank.objects.filter(period_number=1, type=2, group_id=self.player.group_id, player_id=rank_list[3].id_in_group).update(rank=4) models.Rank.objects.filter(period_number=1, type=2, group_id=self.player.group_id, player_id=rank_list[4].id_in_group).update(rank=5) if self.player.condition == 5: rank_list = models.Player.objects.filter(group_id=self.player.group_id).order_by('-running_potential_return', 'id_in_group') models.Rank.objects.filter(period_number=1, type=3, group_id=self.player.group_id, player_id=rank_list[0].id_in_group).update(rank=1) models.Rank.objects.filter(period_number=1, type=3, group_id=self.player.group_id, player_id=rank_list[1].id_in_group).update(rank=2) models.Rank.objects.filter(period_number=1, type=3, group_id=self.player.group_id, player_id=rank_list[2].id_in_group).update(rank=3) models.Rank.objects.filter(period_number=1, type=3, group_id=self.player.group_id, player_id=rank_list[3].id_in_group).update(rank=4) models.Rank.objects.filter(period_number=1, type=3, group_id=self.player.group_id, player_id=rank_list[4].id_in_group).update(rank=5) class P1Result(Page): def vars_for_template(self): if self.player.condition == 2: #Return rankings, but with label based on player's id in group to standardize B, C, D, E... if self.player.id_in_group == 1: return { 'dollar_rank': models.Rank.objects.filter(period_number=1, type=1, group_id=self.player.group_id ).order_by('rank').annotate(label=F('label_for_1')) } elif self.player.id_in_group == 2: return { 'dollar_rank': models.Rank.objects.filter(period_number=1, type=1, group_id=self.player.group_id ).order_by('rank').annotate(label=F('label_for_2')) } elif self.player.id_in_group == 3: return { 'dollar_rank': models.Rank.objects.filter(period_number=1, type=1, group_id=self.player.group_id ).order_by('rank').annotate(label=F('label_for_3')) } elif self.player.id_in_group == 4: return { 'dollar_rank': models.Rank.objects.filter(period_number=1, type=1, group_id=self.player.group_id ).order_by('rank').annotate(label=F('label_for_4')) } elif self.player.id_in_group == 5: return { 'dollar_rank': models.Rank.objects.filter(period_number=1, type=1, group_id=self.player.group_id ).order_by('rank').annotate(label=F('label_for_5')) } elif self.player.condition == 3: if self.player.id_in_group == 1: return { 'impact_rank': models.Rank.objects.filter(period_number=1, type=2, group_id=self.player.group_id ).order_by('rank').annotate(label=F('label_for_1')) } elif self.player.id_in_group == 2: return { 'impact_rank': models.Rank.objects.filter(period_number=1, type=2, group_id=self.player.group_id ).order_by('rank').annotate(label=F('label_for_2')) } elif self.player.id_in_group == 3: return { 'impact_rank': models.Rank.objects.filter(period_number=1, type=2, group_id=self.player.group_id ).order_by('rank').annotate(label=F('label_for_3')) } elif self.player.id_in_group == 4: return { 'impact_rank': models.Rank.objects.filter(period_number=1, type=2, group_id=self.player.group_id ).order_by('rank').annotate(label=F('label_for_4')) } elif self.player.id_in_group == 5: return { 'impact_rank': models.Rank.objects.filter(period_number=1, type=2, group_id=self.player.group_id ).order_by('rank').annotate(label=F('label_for_5')) } elif self.player.condition == 4: if self.player.id_in_group == 1: return { 'dollar_rank': models.Rank.objects.filter(period_number=1, type=1, group_id=self.player.group_id ).order_by('rank').annotate(label=F('label_for_1')), 'impact_rank': models.Rank.objects.filter(period_number=1, type=2, group_id=self.player.group_id ).order_by('rank').annotate(label=F('label_for_1')) } elif self.player.id_in_group == 2: return { 'dollar_rank': models.Rank.objects.filter(period_number=1, type=1, group_id=self.player.group_id ).order_by('rank').annotate(label=F('label_for_2')), 'impact_rank': models.Rank.objects.filter(period_number=1, type=2, group_id=self.player.group_id ).order_by('rank').annotate(label=F('label_for_2')) } elif self.player.id_in_group == 3: return { 'dollar_rank': models.Rank.objects.filter(period_number=1, type=1, group_id=self.player.group_id ).order_by('rank').annotate(label=F('label_for_3')), 'impact_rank': models.Rank.objects.filter(period_number=1, type=2, group_id=self.player.group_id ).order_by('rank').annotate(label=F('label_for_3')) } elif self.player.id_in_group == 4: return { 'dollar_rank': models.Rank.objects.filter(period_number=1, type=1, group_id=self.player.group_id ).order_by('rank').annotate(label=F('label_for_4')), 'impact_rank': models.Rank.objects.filter(period_number=1, type=2, group_id=self.player.group_id ).order_by('rank').annotate(label=F('label_for_4')) } elif self.player.id_in_group == 5: return { 'dollar_rank': models.Rank.objects.filter(period_number=1, type=1, group_id=self.player.group_id ).order_by('rank').annotate(label=F('label_for_5')), 'impact_rank': models.Rank.objects.filter(period_number=1, type=2, group_id=self.player.group_id ).order_by('rank').annotate(label=F('label_for_5')) } elif self.player.condition == 5: if self.player.id_in_group == 1: return { 'return_rank': models.Rank.objects.filter(period_number=1, type=3, group_id=self.player.group_id ).order_by('rank').annotate(label=F('label_for_1')) } elif self.player.id_in_group == 2: return { 'return_rank': models.Rank.objects.filter(period_number=1, type=3, group_id=self.player.group_id ).order_by('rank').annotate(label=F('label_for_2')) } elif self.player.id_in_group == 3: return { 'return_rank': models.Rank.objects.filter(period_number=1, type=3, group_id=self.player.group_id ).order_by('rank').annotate(label=F('label_for_3')) } elif self.player.id_in_group == 4: return { 'return_rank': models.Rank.objects.filter(period_number=1, type=3, group_id=self.player.group_id ).order_by('rank').annotate(label=F('label_for_4')) } elif self.player.id_in_group == 5: return { 'return_rank': models.Rank.objects.filter(period_number=1, type=3, group_id=self.player.group_id ).order_by('rank').annotate(label=F('label_for_5')) } def before_next_page(self): # Update player ranks for data purposes if self.player.condition == 2 or self.player.condition == 4: own_rank = models.Rank.objects.filter(group_id=self.player.group_id, player_id=self.player.id_in_group, period_number=1, type=1)[0] self.player.p1_dollar_rank = own_rank.rank if self.player.condition == 3 or self.player.condition == 4: own_rank = models.Rank.objects.filter(group_id=self.player.group_id, player_id=self.player.id_in_group, period_number=1, type=2)[0] self.player.p1_impact_rank = own_rank.rank if self.player.condition == 5: own_rank = models.Rank.objects.filter(group_id=self.player.group_id, player_id=self.player.id_in_group, period_number=1, type=3)[0] self.player.p1_return_rank = own_rank.rank class Period2(Page): form_model = models.Player form_fields = ['p2_decision_time', 'p2_dollars_kept', 'p2_dollars_invested', 'p2_local_weight', 'p2_state_weight', 'p2_national_weight'] def before_next_page(self): self.player.running_dollars_invested = self.player.p1_dollars_invested + self.player.p2_dollars_invested local_dollars = round(((self.player.p1_dollars_invested * self.player.p1_local_weight / 100) + (self.player.p2_dollars_invested * self.player.p2_local_weight / 100)), 2) state_dollars = round(((self.player.p1_dollars_invested * self.player.p1_state_weight / 100) + (self.player.p2_dollars_invested * self.player.p2_state_weight / 100)), 2) national_dollars = round(((self.player.p1_dollars_invested * self.player.p1_national_weight / 100) + (self.player.p2_dollars_invested * self.player.p2_national_weight / 100)), 2) # Have to account for case where no dollars have been invested if self.player.running_dollars_invested > 0: self.player.running_impact_score = round(((local_dollars / self.player.running_dollars_invested * 2) + (state_dollars / self.player.running_dollars_invested * 3) + (national_dollars / self.player.running_dollars_invested * 6)), 1) else: self.player.running_impact_score = 0 self.player.running_potential_return = round((self.player.running_dollars_invested * self.player.running_impact_score), 2) # Insert record in Rank table to determine overall group ranks in the Interim page... if self.player.condition == 2 or self.player.condition == 4: models.Rank.objects.create(period_number=2, type=1, group_id=self.player.group_id, player_id=self.player.id_in_group, value=self.player.running_dollars_invested) if self.player.id_in_group == 1: models.Rank.objects.filter(period_number=2, type=1, group_id=self.player.group_id, player_id=self.player.id_in_group).update(label_for_1='You', label_for_2='Manager B', label_for_3='Manager B', label_for_4='Manager B', label_for_5='Manager B') elif self.player.id_in_group == 2: models.Rank.objects.filter(period_number=2, type=1, group_id=self.player.group_id, player_id=self.player.id_in_group).update(label_for_1='Manager B', label_for_2='You', label_for_3='Manager C', label_for_4='Manager C', label_for_5='Manager C') elif self.player.id_in_group == 3: models.Rank.objects.filter(period_number=2, type=1, group_id=self.player.group_id, player_id=self.player.id_in_group).update(label_for_1='Manager C', label_for_2='Manager C', label_for_3='You', label_for_4='Manager D', label_for_5='Manager D') elif self.player.id_in_group == 4: models.Rank.objects.filter(period_number=2, type=1, group_id=self.player.group_id, player_id=self.player.id_in_group).update(label_for_1='Manager D', label_for_2='Manager D', label_for_3='Manager D', label_for_4='You', label_for_5='Manager E') elif self.player.id_in_group == 5: models.Rank.objects.filter(period_number=2, type=1, group_id=self.player.group_id, player_id=self.player.id_in_group).update(label_for_1='Manager E', label_for_2='Manager E', label_for_3='Manager E', label_for_4='Manager E', label_for_5='You') if self.player.condition == 3 or self.player.condition == 4: models.Rank.objects.create(period_number=2, type=2, group_id=self.player.group_id, player_id=self.player.id_in_group, value=self.player.running_impact_score) if self.player.id_in_group == 1: models.Rank.objects.filter(period_number=2, type=2, group_id=self.player.group_id, player_id=self.player.id_in_group).update(label_for_1='You', label_for_2='Manager B', label_for_3='Manager B', label_for_4='Manager B', label_for_5='Manager B') elif self.player.id_in_group == 2: models.Rank.objects.filter(period_number=2, type=2, group_id=self.player.group_id, player_id=self.player.id_in_group).update(label_for_1='Manager B', label_for_2='You', label_for_3='Manager C', label_for_4='Manager C', label_for_5='Manager C') elif self.player.id_in_group == 3: models.Rank.objects.filter(period_number=2, type=2, group_id=self.player.group_id, player_id=self.player.id_in_group).update(label_for_1='Manager C', label_for_2='Manager C', label_for_3='You', label_for_4='Manager D', label_for_5='Manager D') elif self.player.id_in_group == 4: models.Rank.objects.filter(period_number=2, type=2, group_id=self.player.group_id, player_id=self.player.id_in_group).update(label_for_1='Manager D', label_for_2='Manager D', label_for_3='Manager D', label_for_4='You', label_for_5='Manager E') elif self.player.id_in_group == 5: models.Rank.objects.filter(period_number=2, type=2, group_id=self.player.group_id, player_id=self.player.id_in_group).update(label_for_1='Manager E', label_for_2='Manager E', label_for_3='Manager E', label_for_4='Manager E', label_for_5='You') if self.player.condition == 5: models.Rank.objects.create(period_number=2, type=3, group_id=self.player.group_id, player_id=self.player.id_in_group, value=self.player.running_potential_return) if self.player.id_in_group == 1: models.Rank.objects.filter(period_number=2, type=3, group_id=self.player.group_id, player_id=self.player.id_in_group).update(label_for_1='You', label_for_2='Manager B', label_for_3='Manager B', label_for_4='Manager B', label_for_5='Manager B') elif self.player.id_in_group == 2: models.Rank.objects.filter(period_number=2, type=3, group_id=self.player.group_id, player_id=self.player.id_in_group).update(label_for_1='Manager B', label_for_2='You', label_for_3='Manager C', label_for_4='Manager C', label_for_5='Manager C') elif self.player.id_in_group == 3: models.Rank.objects.filter(period_number=2, type=3, group_id=self.player.group_id, player_id=self.player.id_in_group).update(label_for_1='Manager C', label_for_2='Manager C', label_for_3='You', label_for_4='Manager D', label_for_5='Manager D') elif self.player.id_in_group == 4: models.Rank.objects.filter(period_number=2, type=3, group_id=self.player.group_id, player_id=self.player.id_in_group).update(label_for_1='Manager D', label_for_2='Manager D', label_for_3='Manager D', label_for_4='You', label_for_5='Manager E') elif self.player.id_in_group == 5: models.Rank.objects.filter(period_number=2, type=3, group_id=self.player.group_id, player_id=self.player.id_in_group).update(label_for_1='Manager E', label_for_2='Manager E', label_for_3='Manager E', label_for_4='Manager E', label_for_5='You') class P2Interim(Page): def before_next_page(self): # Only have to do this once for the group if self.player.id_in_group == 1: if self.player.condition == 2 or self.player.condition == 4: # Run django query to return ordered rank list. Then for each object in that queryset, run # insert into the Rank table. Then on the results page, I can loop through that queryset to print # the results. rank_list = models.Player.objects.filter(group_id=self.player.group_id).order_by('-running_dollars_invested', 'id_in_group') models.Rank.objects.filter(period_number=2, type=1, group_id=self.player.group_id, player_id=rank_list[0].id_in_group).update(rank=1) models.Rank.objects.filter(period_number=2, type=1, group_id=self.player.group_id, player_id=rank_list[1].id_in_group).update(rank=2) models.Rank.objects.filter(period_number=2, type=1, group_id=self.player.group_id, player_id=rank_list[2].id_in_group).update(rank=3) models.Rank.objects.filter(period_number=2, type=1, group_id=self.player.group_id, player_id=rank_list[3].id_in_group).update(rank=4) models.Rank.objects.filter(period_number=2, type=1, group_id=self.player.group_id, player_id=rank_list[4].id_in_group).update(rank=5) if self.player.condition == 3 or self.player.condition == 4: rank_list = models.Player.objects.filter(group_id=self.player.group_id).order_by('-running_impact_score', 'id_in_group') models.Rank.objects.filter(period_number=2, type=2, group_id=self.player.group_id, player_id=rank_list[0].id_in_group).update(rank=1) models.Rank.objects.filter(period_number=2, type=2, group_id=self.player.group_id, player_id=rank_list[1].id_in_group).update(rank=2) models.Rank.objects.filter(period_number=2, type=2, group_id=self.player.group_id, player_id=rank_list[2].id_in_group).update(rank=3) models.Rank.objects.filter(period_number=2, type=2, group_id=self.player.group_id, player_id=rank_list[3].id_in_group).update(rank=4) models.Rank.objects.filter(period_number=2, type=2, group_id=self.player.group_id, player_id=rank_list[4].id_in_group).update(rank=5) if self.player.condition == 5: rank_list = models.Player.objects.filter(group_id=self.player.group_id).order_by('-running_potential_return', 'id_in_group') models.Rank.objects.filter(period_number=2, type=3, group_id=self.player.group_id, player_id=rank_list[0].id_in_group).update(rank=1) models.Rank.objects.filter(period_number=2, type=3, group_id=self.player.group_id, player_id=rank_list[1].id_in_group).update(rank=2) models.Rank.objects.filter(period_number=2, type=3, group_id=self.player.group_id, player_id=rank_list[2].id_in_group).update(rank=3) models.Rank.objects.filter(period_number=2, type=3, group_id=self.player.group_id, player_id=rank_list[3].id_in_group).update(rank=4) models.Rank.objects.filter(period_number=2, type=3, group_id=self.player.group_id, player_id=rank_list[4].id_in_group).update(rank=5) class P2Result(Page): def vars_for_template(self): if self.player.condition == 2: #Return rankings, but with label based on player's id in group to standardize B, C, D, E... if self.player.id_in_group == 1: return { 'dollar_rank': models.Rank.objects.filter(period_number=2, type=1, group_id=self.player.group_id ).order_by('rank').annotate(label=F('label_for_1')) } elif self.player.id_in_group == 2: return { 'dollar_rank': models.Rank.objects.filter(period_number=2, type=1, group_id=self.player.group_id ).order_by('rank').annotate(label=F('label_for_2')) } elif self.player.id_in_group == 3: return { 'dollar_rank': models.Rank.objects.filter(period_number=2, type=1, group_id=self.player.group_id ).order_by('rank').annotate(label=F('label_for_3')) } elif self.player.id_in_group == 4: return { 'dollar_rank': models.Rank.objects.filter(period_number=2, type=1, group_id=self.player.group_id ).order_by('rank').annotate(label=F('label_for_4')) } elif self.player.id_in_group == 5: return { 'dollar_rank': models.Rank.objects.filter(period_number=2, type=1, group_id=self.player.group_id ).order_by('rank').annotate(label=F('label_for_5')) } elif self.player.condition == 3: if self.player.id_in_group == 1: return { 'impact_rank': models.Rank.objects.filter(period_number=2, type=2, group_id=self.player.group_id ).order_by('rank').annotate(label=F('label_for_1')) } elif self.player.id_in_group == 2: return { 'impact_rank': models.Rank.objects.filter(period_number=2, type=2, group_id=self.player.group_id ).order_by('rank').annotate(label=F('label_for_2')) } elif self.player.id_in_group == 3: return { 'impact_rank': models.Rank.objects.filter(period_number=2, type=2, group_id=self.player.group_id ).order_by('rank').annotate(label=F('label_for_3')) } elif self.player.id_in_group == 4: return { 'impact_rank': models.Rank.objects.filter(period_number=2, type=2, group_id=self.player.group_id ).order_by('rank').annotate(label=F('label_for_4')) } elif self.player.id_in_group == 5: return { 'impact_rank': models.Rank.objects.filter(period_number=2, type=2, group_id=self.player.group_id ).order_by('rank').annotate(label=F('label_for_5')) } elif self.player.condition == 4: if self.player.id_in_group == 1: return { 'dollar_rank': models.Rank.objects.filter(period_number=2, type=1, group_id=self.player.group_id ).order_by('rank').annotate(label=F('label_for_1')), 'impact_rank': models.Rank.objects.filter(period_number=2, type=2, group_id=self.player.group_id ).order_by('rank').annotate(label=F('label_for_1')) } elif self.player.id_in_group == 2: return { 'dollar_rank': models.Rank.objects.filter(period_number=2, type=1, group_id=self.player.group_id ).order_by('rank').annotate(label=F('label_for_2')), 'impact_rank': models.Rank.objects.filter(period_number=2, type=2, group_id=self.player.group_id ).order_by('rank').annotate(label=F('label_for_2')) } elif self.player.id_in_group == 3: return { 'dollar_rank': models.Rank.objects.filter(period_number=2, type=1, group_id=self.player.group_id ).order_by('rank').annotate(label=F('label_for_3')), 'impact_rank': models.Rank.objects.filter(period_number=2, type=2, group_id=self.player.group_id ).order_by('rank').annotate(label=F('label_for_3')) } elif self.player.id_in_group == 4: return { 'dollar_rank': models.Rank.objects.filter(period_number=2, type=1, group_id=self.player.group_id ).order_by('rank').annotate(label=F('label_for_4')), 'impact_rank': models.Rank.objects.filter(period_number=2, type=2, group_id=self.player.group_id ).order_by('rank').annotate(label=F('label_for_4')) } elif self.player.id_in_group == 5: return { 'dollar_rank': models.Rank.objects.filter(period_number=2, type=1, group_id=self.player.group_id ).order_by('rank').annotate(label=F('label_for_5')), 'impact_rank': models.Rank.objects.filter(period_number=2, type=2, group_id=self.player.group_id ).order_by('rank').annotate(label=F('label_for_5')) } elif self.player.condition == 5: if self.player.id_in_group == 1: return { 'return_rank': models.Rank.objects.filter(period_number=2, type=3, group_id=self.player.group_id ).order_by('rank').annotate(label=F('label_for_1')) } elif self.player.id_in_group == 2: return { 'return_rank': models.Rank.objects.filter(period_number=2, type=3, group_id=self.player.group_id ).order_by('rank').annotate(label=F('label_for_2')) } elif self.player.id_in_group == 3: return { 'return_rank': models.Rank.objects.filter(period_number=2, type=3, group_id=self.player.group_id ).order_by('rank').annotate(label=F('label_for_3')) } elif self.player.id_in_group == 4: return { 'return_rank': models.Rank.objects.filter(period_number=2, type=3, group_id=self.player.group_id ).order_by('rank').annotate(label=F('label_for_4')) } elif self.player.id_in_group == 5: return { 'return_rank': models.Rank.objects.filter(period_number=2, type=3, group_id=self.player.group_id ).order_by('rank').annotate(label=F('label_for_5')) } def before_next_page(self): # Update player ranks for data purposes if self.player.condition == 2 or self.player.condition == 4: own_rank = models.Rank.objects.filter(group_id=self.player.group_id, player_id=self.player.id_in_group, period_number=2, type=1)[0] self.player.p2_dollar_rank = own_rank.rank if self.player.condition == 3 or self.player.condition == 4: own_rank = models.Rank.objects.filter(group_id=self.player.group_id, player_id=self.player.id_in_group, period_number=2, type=2)[0] self.player.p2_impact_rank = own_rank.rank if self.player.condition == 5: own_rank = models.Rank.objects.filter(group_id=self.player.group_id, player_id=self.player.id_in_group, period_number=2, type=3)[0] self.player.p2_return_rank = own_rank.rank class Period3(Page): form_model = models.Player form_fields = ['p3_decision_time', 'p3_dollars_kept', 'p3_dollars_invested', 'p3_local_weight', 'p3_state_weight', 'p3_national_weight'] def before_next_page(self): self.player.running_dollars_invested = self.player.p1_dollars_invested + self.player.p2_dollars_invested + \ self.player.p3_dollars_invested local_dollars = round(((self.player.p1_dollars_invested * self.player.p1_local_weight / 100) + (self.player.p2_dollars_invested * self.player.p2_local_weight / 100) + (self.player.p3_dollars_invested * self.player.p3_local_weight / 100)), 2) state_dollars = round(((self.player.p1_dollars_invested * self.player.p1_state_weight / 100) + (self.player.p2_dollars_invested * self.player.p2_state_weight / 100) + (self.player.p3_dollars_invested * self.player.p3_state_weight / 100)), 2) national_dollars = round(((self.player.p1_dollars_invested * self.player.p1_national_weight / 100) + (self.player.p2_dollars_invested * self.player.p2_national_weight / 100) + (self.player.p3_dollars_invested * self.player.p3_national_weight / 100)), 2) # Have to account for case where no dollars have been invested if self.player.running_dollars_invested > 0: self.player.running_impact_score = round(((local_dollars / self.player.running_dollars_invested * 2) + (state_dollars / self.player.running_dollars_invested * 3) + (national_dollars / self.player.running_dollars_invested * 6)), 1) else: self.player.running_impact_score = 0 self.player.running_potential_return = round((self.player.running_dollars_invested * self.player.running_impact_score), 2) # Insert record in Rank table to determine overall group ranks in the Interim page... if self.player.condition == 2 or self.player.condition == 4: models.Rank.objects.create(period_number=3, type=1, group_id=self.player.group_id, player_id=self.player.id_in_group, value=self.player.running_dollars_invested) if self.player.id_in_group == 1: models.Rank.objects.filter(period_number=3, type=1, group_id=self.player.group_id, player_id=self.player.id_in_group).update(label_for_1='You', label_for_2='Manager B', label_for_3='Manager B', label_for_4='Manager B', label_for_5='Manager B') elif self.player.id_in_group == 2: models.Rank.objects.filter(period_number=3, type=1, group_id=self.player.group_id, player_id=self.player.id_in_group).update(label_for_1='Manager B', label_for_2='You', label_for_3='Manager C', label_for_4='Manager C', label_for_5='Manager C') elif self.player.id_in_group == 3: models.Rank.objects.filter(period_number=3, type=1, group_id=self.player.group_id, player_id=self.player.id_in_group).update(label_for_1='Manager C', label_for_2='Manager C', label_for_3='You', label_for_4='Manager D', label_for_5='Manager D') elif self.player.id_in_group == 4: models.Rank.objects.filter(period_number=3, type=1, group_id=self.player.group_id, player_id=self.player.id_in_group).update(label_for_1='Manager D', label_for_2='Manager D', label_for_3='Manager D', label_for_4='You', label_for_5='Manager E') elif self.player.id_in_group == 5: models.Rank.objects.filter(period_number=3, type=1, group_id=self.player.group_id, player_id=self.player.id_in_group).update(label_for_1='Manager E', label_for_2='Manager E', label_for_3='Manager E', label_for_4='Manager E', label_for_5='You') if self.player.condition == 3 or self.player.condition == 4: models.Rank.objects.create(period_number=3, type=2, group_id=self.player.group_id, player_id=self.player.id_in_group, value=self.player.running_impact_score) if self.player.id_in_group == 1: models.Rank.objects.filter(period_number=3, type=2, group_id=self.player.group_id, player_id=self.player.id_in_group).update(label_for_1='You', label_for_2='Manager B', label_for_3='Manager B', label_for_4='Manager B', label_for_5='Manager B') elif self.player.id_in_group == 2: models.Rank.objects.filter(period_number=3, type=2, group_id=self.player.group_id, player_id=self.player.id_in_group).update(label_for_1='Manager B', label_for_2='You', label_for_3='Manager C', label_for_4='Manager C', label_for_5='Manager C') elif self.player.id_in_group == 3: models.Rank.objects.filter(period_number=3, type=2, group_id=self.player.group_id, player_id=self.player.id_in_group).update(label_for_1='Manager C', label_for_2='Manager C', label_for_3='You', label_for_4='Manager D', label_for_5='Manager D') elif self.player.id_in_group == 4: models.Rank.objects.filter(period_number=3, type=2, group_id=self.player.group_id, player_id=self.player.id_in_group).update(label_for_1='Manager D', label_for_2='Manager D', label_for_3='Manager D', label_for_4='You', label_for_5='Manager E') elif self.player.id_in_group == 5: models.Rank.objects.filter(period_number=3, type=2, group_id=self.player.group_id, player_id=self.player.id_in_group).update(label_for_1='Manager E', label_for_2='Manager E', label_for_3='Manager E', label_for_4='Manager E', label_for_5='You') if self.player.condition == 5: models.Rank.objects.create(period_number=3, type=3, group_id=self.player.group_id, player_id=self.player.id_in_group, value=self.player.running_potential_return) if self.player.id_in_group == 1: models.Rank.objects.filter(period_number=3, type=3, group_id=self.player.group_id, player_id=self.player.id_in_group).update(label_for_1='You', label_for_2='Manager B', label_for_3='Manager B', label_for_4='Manager B', label_for_5='Manager B') elif self.player.id_in_group == 2: models.Rank.objects.filter(period_number=3, type=3, group_id=self.player.group_id, player_id=self.player.id_in_group).update(label_for_1='Manager B', label_for_2='You', label_for_3='Manager C', label_for_4='Manager C', label_for_5='Manager C') elif self.player.id_in_group == 3: models.Rank.objects.filter(period_number=3, type=3, group_id=self.player.group_id, player_id=self.player.id_in_group).update(label_for_1='Manager C', label_for_2='Manager C', label_for_3='You', label_for_4='Manager D', label_for_5='Manager D') elif self.player.id_in_group == 4: models.Rank.objects.filter(period_number=3, type=3, group_id=self.player.group_id, player_id=self.player.id_in_group).update(label_for_1='Manager D', label_for_2='Manager D', label_for_3='Manager D', label_for_4='You', label_for_5='Manager E') elif self.player.id_in_group == 5: models.Rank.objects.filter(period_number=3, type=3, group_id=self.player.group_id, player_id=self.player.id_in_group).update(label_for_1='Manager E', label_for_2='Manager E', label_for_3='Manager E', label_for_4='Manager E', label_for_5='You') class P3Interim(Page): def before_next_page(self): # Only have to do this once for the group if self.player.id_in_group == 1: if self.player.condition == 2 or self.player.condition == 4: # Run django query to return ordered rank list. Then for each object in that queryset, run # insert into the Rank table. Then on the results page, I can loop through that queryset to print # the results. rank_list = models.Player.objects.filter(group_id=self.player.group_id).order_by('-running_dollars_invested', 'id_in_group') models.Rank.objects.filter(period_number=3, type=1, group_id=self.player.group_id, player_id=rank_list[0].id_in_group).update(rank=1) models.Rank.objects.filter(period_number=3, type=1, group_id=self.player.group_id, player_id=rank_list[1].id_in_group).update(rank=2) models.Rank.objects.filter(period_number=3, type=1, group_id=self.player.group_id, player_id=rank_list[2].id_in_group).update(rank=3) models.Rank.objects.filter(period_number=3, type=1, group_id=self.player.group_id, player_id=rank_list[3].id_in_group).update(rank=4) models.Rank.objects.filter(period_number=3, type=1, group_id=self.player.group_id, player_id=rank_list[4].id_in_group).update(rank=5) if self.player.condition == 3 or self.player.condition == 4: rank_list = models.Player.objects.filter(group_id=self.player.group_id).order_by('-running_impact_score', 'id_in_group') models.Rank.objects.filter(period_number=3, type=2, group_id=self.player.group_id, player_id=rank_list[0].id_in_group).update(rank=1) models.Rank.objects.filter(period_number=3, type=2, group_id=self.player.group_id, player_id=rank_list[1].id_in_group).update(rank=2) models.Rank.objects.filter(period_number=3, type=2, group_id=self.player.group_id, player_id=rank_list[2].id_in_group).update(rank=3) models.Rank.objects.filter(period_number=3, type=2, group_id=self.player.group_id, player_id=rank_list[3].id_in_group).update(rank=4) models.Rank.objects.filter(period_number=3, type=2, group_id=self.player.group_id, player_id=rank_list[4].id_in_group).update(rank=5) if self.player.condition == 5: rank_list = models.Player.objects.filter(group_id=self.player.group_id).order_by('-running_potential_return', 'id_in_group') models.Rank.objects.filter(period_number=3, type=3, group_id=self.player.group_id, player_id=rank_list[0].id_in_group).update(rank=1) models.Rank.objects.filter(period_number=3, type=3, group_id=self.player.group_id, player_id=rank_list[1].id_in_group).update(rank=2) models.Rank.objects.filter(period_number=3, type=3, group_id=self.player.group_id, player_id=rank_list[2].id_in_group).update(rank=3) models.Rank.objects.filter(period_number=3, type=3, group_id=self.player.group_id, player_id=rank_list[3].id_in_group).update(rank=4) models.Rank.objects.filter(period_number=3, type=3, group_id=self.player.group_id, player_id=rank_list[4].id_in_group).update(rank=5) class P3Result(Page): def vars_for_template(self): if self.player.condition == 2: # Return rankings, but with label based on player's id in group to standardize B, C, D, E... if self.player.id_in_group == 1: return { 'dollar_rank': models.Rank.objects.filter(period_number=3, type=1, group_id=self.player.group_id ).order_by('rank').annotate(label=F('label_for_1')) } elif self.player.id_in_group == 2: return { 'dollar_rank': models.Rank.objects.filter(period_number=3, type=1, group_id=self.player.group_id ).order_by('rank').annotate(label=F('label_for_2')) } elif self.player.id_in_group == 3: return { 'dollar_rank': models.Rank.objects.filter(period_number=3, type=1, group_id=self.player.group_id ).order_by('rank').annotate(label=F('label_for_3')) } elif self.player.id_in_group == 4: return { 'dollar_rank': models.Rank.objects.filter(period_number=3, type=1, group_id=self.player.group_id ).order_by('rank').annotate(label=F('label_for_4')) } elif self.player.id_in_group == 5: return { 'dollar_rank': models.Rank.objects.filter(period_number=3, type=1, group_id=self.player.group_id ).order_by('rank').annotate(label=F('label_for_5')) } elif self.player.condition == 3: if self.player.id_in_group == 1: return { 'impact_rank': models.Rank.objects.filter(period_number=3, type=2, group_id=self.player.group_id ).order_by('rank').annotate(label=F('label_for_1')) } elif self.player.id_in_group == 2: return { 'impact_rank': models.Rank.objects.filter(period_number=3, type=2, group_id=self.player.group_id ).order_by('rank').annotate(label=F('label_for_2')) } elif self.player.id_in_group == 3: return { 'impact_rank': models.Rank.objects.filter(period_number=3, type=2, group_id=self.player.group_id ).order_by('rank').annotate(label=F('label_for_3')) } elif self.player.id_in_group == 4: return { 'impact_rank': models.Rank.objects.filter(period_number=3, type=2, group_id=self.player.group_id ).order_by('rank').annotate(label=F('label_for_4')) } elif self.player.id_in_group == 5: return { 'impact_rank': models.Rank.objects.filter(period_number=3, type=2, group_id=self.player.group_id ).order_by('rank').annotate(label=F('label_for_5')) } elif self.player.condition == 4: if self.player.id_in_group == 1: return { 'dollar_rank': models.Rank.objects.filter(period_number=3, type=1, group_id=self.player.group_id ).order_by('rank').annotate(label=F('label_for_1')), 'impact_rank': models.Rank.objects.filter(period_number=3, type=2, group_id=self.player.group_id ).order_by('rank').annotate(label=F('label_for_1')) } elif self.player.id_in_group == 2: return { 'dollar_rank': models.Rank.objects.filter(period_number=3, type=1, group_id=self.player.group_id ).order_by('rank').annotate(label=F('label_for_2')), 'impact_rank': models.Rank.objects.filter(period_number=3, type=2, group_id=self.player.group_id ).order_by('rank').annotate(label=F('label_for_2')) } elif self.player.id_in_group == 3: return { 'dollar_rank': models.Rank.objects.filter(period_number=3, type=1, group_id=self.player.group_id ).order_by('rank').annotate(label=F('label_for_3')), 'impact_rank': models.Rank.objects.filter(period_number=3, type=2, group_id=self.player.group_id ).order_by('rank').annotate(label=F('label_for_3')) } elif self.player.id_in_group == 4: return { 'dollar_rank': models.Rank.objects.filter(period_number=3, type=1, group_id=self.player.group_id ).order_by('rank').annotate(label=F('label_for_4')), 'impact_rank': models.Rank.objects.filter(period_number=3, type=2, group_id=self.player.group_id ).order_by('rank').annotate(label=F('label_for_4')) } elif self.player.id_in_group == 5: return { 'dollar_rank': models.Rank.objects.filter(period_number=3, type=1, group_id=self.player.group_id ).order_by('rank').annotate(label=F('label_for_5')), 'impact_rank': models.Rank.objects.filter(period_number=3, type=2, group_id=self.player.group_id ).order_by('rank').annotate(label=F('label_for_5')) } elif self.player.condition == 5: if self.player.id_in_group == 1: return { 'return_rank': models.Rank.objects.filter(period_number=3, type=3, group_id=self.player.group_id ).order_by('rank').annotate(label=F('label_for_1')) } elif self.player.id_in_group == 2: return { 'return_rank': models.Rank.objects.filter(period_number=3, type=3, group_id=self.player.group_id ).order_by('rank').annotate(label=F('label_for_2')) } elif self.player.id_in_group == 3: return { 'return_rank': models.Rank.objects.filter(period_number=3, type=3, group_id=self.player.group_id ).order_by('rank').annotate(label=F('label_for_3')) } elif self.player.id_in_group == 4: return { 'return_rank': models.Rank.objects.filter(period_number=3, type=3, group_id=self.player.group_id ).order_by('rank').annotate(label=F('label_for_4')) } elif self.player.id_in_group == 5: return { 'return_rank': models.Rank.objects.filter(period_number=3, type=3, group_id=self.player.group_id ).order_by('rank').annotate(label=F('label_for_5')) } def before_next_page(self): # Update player ranks for data purposes if self.player.condition == 2 or self.player.condition == 4: own_rank = models.Rank.objects.filter(group_id=self.player.group_id, player_id=self.player.id_in_group, period_number=3, type=1)[0] self.player.p3_dollar_rank = own_rank.rank if self.player.condition == 3 or self.player.condition == 4: own_rank = models.Rank.objects.filter(group_id=self.player.group_id, player_id=self.player.id_in_group, period_number=3, type=2)[0] self.player.p3_impact_rank = own_rank.rank if self.player.condition == 5: own_rank = models.Rank.objects.filter(group_id=self.player.group_id, player_id=self.player.id_in_group, period_number=3, type=3)[0] self.player.p3_return_rank = own_rank.rank class Period4(Page): form_model = models.Player form_fields = ['p4_decision_time', 'p4_dollars_kept', 'p4_dollars_invested', 'p4_local_weight', 'p4_state_weight', 'p4_national_weight'] def before_next_page(self): self.player.running_dollars_invested = self.player.p1_dollars_invested + self.player.p2_dollars_invested + \ self.player.p3_dollars_invested + self.player.p4_dollars_invested local_dollars = round(((self.player.p1_dollars_invested * self.player.p1_local_weight / 100) + (self.player.p2_dollars_invested * self.player.p2_local_weight / 100) + (self.player.p3_dollars_invested * self.player.p3_local_weight / 100) + (self.player.p4_dollars_invested * self.player.p4_local_weight / 100)), 2) state_dollars = round(((self.player.p1_dollars_invested * self.player.p1_state_weight / 100) + (self.player.p2_dollars_invested * self.player.p2_state_weight / 100) + (self.player.p3_dollars_invested * self.player.p3_state_weight / 100) + (self.player.p4_dollars_invested * self.player.p4_state_weight / 100)), 2) national_dollars = round(((self.player.p1_dollars_invested * self.player.p1_national_weight / 100) + (self.player.p2_dollars_invested * self.player.p2_national_weight / 100) + (self.player.p3_dollars_invested * self.player.p3_national_weight / 100) + (self.player.p4_dollars_invested * self.player.p4_national_weight / 100)), 2) # Have to account for case where no dollars have been invested if self.player.running_dollars_invested > 0: self.player.running_impact_score = round(((local_dollars / self.player.running_dollars_invested * 2) + (state_dollars / self.player.running_dollars_invested * 3) + (national_dollars / self.player.running_dollars_invested * 6)), 1) else: self.player.running_impact_score = 0 self.player.running_potential_return = round((self.player.running_dollars_invested * self.player.running_impact_score), 2) # Insert record in Rank table to determine overall group ranks in the Interim page... if self.player.condition == 2 or self.player.condition == 4: models.Rank.objects.create(period_number=4, type=1, group_id=self.player.group_id, player_id=self.player.id_in_group, value=self.player.running_dollars_invested) if self.player.id_in_group == 1: models.Rank.objects.filter(period_number=4, type=1, group_id=self.player.group_id, player_id=self.player.id_in_group).update(label_for_1='You', label_for_2='Manager B', label_for_3='Manager B', label_for_4='Manager B', label_for_5='Manager B') elif self.player.id_in_group == 2: models.Rank.objects.filter(period_number=4, type=1, group_id=self.player.group_id, player_id=self.player.id_in_group).update(label_for_1='Manager B', label_for_2='You', label_for_3='Manager C', label_for_4='Manager C', label_for_5='Manager C') elif self.player.id_in_group == 3: models.Rank.objects.filter(period_number=4, type=1, group_id=self.player.group_id, player_id=self.player.id_in_group).update(label_for_1='Manager C', label_for_2='Manager C', label_for_3='You', label_for_4='Manager D', label_for_5='Manager D') elif self.player.id_in_group == 4: models.Rank.objects.filter(period_number=4, type=1, group_id=self.player.group_id, player_id=self.player.id_in_group).update(label_for_1='Manager D', label_for_2='Manager D', label_for_3='Manager D', label_for_4='You', label_for_5='Manager E') elif self.player.id_in_group == 5: models.Rank.objects.filter(period_number=4, type=1, group_id=self.player.group_id, player_id=self.player.id_in_group).update(label_for_1='Manager E', label_for_2='Manager E', label_for_3='Manager E', label_for_4='Manager E', label_for_5='You') if self.player.condition == 3 or self.player.condition == 4: models.Rank.objects.create(period_number=4, type=2, group_id=self.player.group_id, player_id=self.player.id_in_group, value=self.player.running_impact_score) if self.player.id_in_group == 1: models.Rank.objects.filter(period_number=4, type=2, group_id=self.player.group_id, player_id=self.player.id_in_group).update(label_for_1='You', label_for_2='Manager B', label_for_3='Manager B', label_for_4='Manager B', label_for_5='Manager B') elif self.player.id_in_group == 2: models.Rank.objects.filter(period_number=4, type=2, group_id=self.player.group_id, player_id=self.player.id_in_group).update(label_for_1='Manager B', label_for_2='You', label_for_3='Manager C', label_for_4='Manager C', label_for_5='Manager C') elif self.player.id_in_group == 3: models.Rank.objects.filter(period_number=4, type=2, group_id=self.player.group_id, player_id=self.player.id_in_group).update(label_for_1='Manager C', label_for_2='Manager C', label_for_3='You', label_for_4='Manager D', label_for_5='Manager D') elif self.player.id_in_group == 4: models.Rank.objects.filter(period_number=4, type=2, group_id=self.player.group_id, player_id=self.player.id_in_group).update(label_for_1='Manager D', label_for_2='Manager D', label_for_3='Manager D', label_for_4='You', label_for_5='Manager E') elif self.player.id_in_group == 5: models.Rank.objects.filter(period_number=4, type=2, group_id=self.player.group_id, player_id=self.player.id_in_group).update(label_for_1='Manager E', label_for_2='Manager E', label_for_3='Manager E', label_for_4='Manager E', label_for_5='You') if self.player.condition == 5: models.Rank.objects.create(period_number=4, type=3, group_id=self.player.group_id, player_id=self.player.id_in_group, value=self.player.running_potential_return) if self.player.id_in_group == 1: models.Rank.objects.filter(period_number=4, type=3, group_id=self.player.group_id, player_id=self.player.id_in_group).update(label_for_1='You', label_for_2='Manager B', label_for_3='Manager B', label_for_4='Manager B', label_for_5='Manager B') elif self.player.id_in_group == 2: models.Rank.objects.filter(period_number=4, type=3, group_id=self.player.group_id, player_id=self.player.id_in_group).update(label_for_1='Manager B', label_for_2='You', label_for_3='Manager C', label_for_4='Manager C', label_for_5='Manager C') elif self.player.id_in_group == 3: models.Rank.objects.filter(period_number=4, type=3, group_id=self.player.group_id, player_id=self.player.id_in_group).update(label_for_1='Manager C', label_for_2='Manager C', label_for_3='You', label_for_4='Manager D', label_for_5='Manager D') elif self.player.id_in_group == 4: models.Rank.objects.filter(period_number=4, type=3, group_id=self.player.group_id, player_id=self.player.id_in_group).update(label_for_1='Manager D', label_for_2='Manager D', label_for_3='Manager D', label_for_4='You', label_for_5='Manager E') elif self.player.id_in_group == 5: models.Rank.objects.filter(period_number=4, type=3, group_id=self.player.group_id, player_id=self.player.id_in_group).update(label_for_1='Manager E', label_for_2='Manager E', label_for_3='Manager E', label_for_4='Manager E', label_for_5='You') class P4Interim(Page): def before_next_page(self): # Only have to do this once for the group if self.player.id_in_group == 1: if self.player.condition == 2 or self.player.condition == 4: # Run django query to return ordered rank list. Then for each object in that queryset, run # insert into the Rank table. Then on the results page, I can loop through that queryset to print # the results. rank_list = models.Player.objects.filter(group_id=self.player.group_id).order_by('-running_dollars_invested', 'id_in_group') models.Rank.objects.filter(period_number=4, type=1, group_id=self.player.group_id, player_id=rank_list[0].id_in_group).update(rank=1) models.Rank.objects.filter(period_number=4, type=1, group_id=self.player.group_id, player_id=rank_list[1].id_in_group).update(rank=2) models.Rank.objects.filter(period_number=4, type=1, group_id=self.player.group_id, player_id=rank_list[2].id_in_group).update(rank=3) models.Rank.objects.filter(period_number=4, type=1, group_id=self.player.group_id, player_id=rank_list[3].id_in_group).update(rank=4) models.Rank.objects.filter(period_number=4, type=1, group_id=self.player.group_id, player_id=rank_list[4].id_in_group).update(rank=5) if self.player.condition == 3 or self.player.condition == 4: rank_list = models.Player.objects.filter(group_id=self.player.group_id).order_by('-running_impact_score', 'id_in_group') models.Rank.objects.filter(period_number=4, type=2, group_id=self.player.group_id, player_id=rank_list[0].id_in_group).update(rank=1) models.Rank.objects.filter(period_number=4, type=2, group_id=self.player.group_id, player_id=rank_list[1].id_in_group).update(rank=2) models.Rank.objects.filter(period_number=4, type=2, group_id=self.player.group_id, player_id=rank_list[2].id_in_group).update(rank=3) models.Rank.objects.filter(period_number=4, type=2, group_id=self.player.group_id, player_id=rank_list[3].id_in_group).update(rank=4) models.Rank.objects.filter(period_number=4, type=2, group_id=self.player.group_id, player_id=rank_list[4].id_in_group).update(rank=5) if self.player.condition == 5: rank_list = models.Player.objects.filter(group_id=self.player.group_id).order_by('-running_potential_return', 'id_in_group') models.Rank.objects.filter(period_number=4, type=3, group_id=self.player.group_id, player_id=rank_list[0].id_in_group).update(rank=1) models.Rank.objects.filter(period_number=4, type=3, group_id=self.player.group_id, player_id=rank_list[1].id_in_group).update(rank=2) models.Rank.objects.filter(period_number=4, type=3, group_id=self.player.group_id, player_id=rank_list[2].id_in_group).update(rank=3) models.Rank.objects.filter(period_number=4, type=3, group_id=self.player.group_id, player_id=rank_list[3].id_in_group).update(rank=4) models.Rank.objects.filter(period_number=4, type=3, group_id=self.player.group_id, player_id=rank_list[4].id_in_group).update(rank=5) class P4Result(Page): def vars_for_template(self): if self.player.condition == 2: # Return rankings, but with label based on player's id in group to standardize B, C, D, E... if self.player.id_in_group == 1: return { 'dollar_rank': models.Rank.objects.filter(period_number=4, type=1, group_id=self.player.group_id ).order_by('rank').annotate(label=F('label_for_1')) } elif self.player.id_in_group == 2: return { 'dollar_rank': models.Rank.objects.filter(period_number=4, type=1, group_id=self.player.group_id ).order_by('rank').annotate(label=F('label_for_2')) } elif self.player.id_in_group == 3: return { 'dollar_rank': models.Rank.objects.filter(period_number=4, type=1, group_id=self.player.group_id ).order_by('rank').annotate(label=F('label_for_3')) } elif self.player.id_in_group == 4: return { 'dollar_rank': models.Rank.objects.filter(period_number=4, type=1, group_id=self.player.group_id ).order_by('rank').annotate(label=F('label_for_4')) } elif self.player.id_in_group == 5: return { 'dollar_rank': models.Rank.objects.filter(period_number=4, type=1, group_id=self.player.group_id ).order_by('rank').annotate(label=F('label_for_5')) } elif self.player.condition == 3: if self.player.id_in_group == 1: return { 'impact_rank': models.Rank.objects.filter(period_number=4, type=2, group_id=self.player.group_id ).order_by('rank').annotate(label=F('label_for_1')) } elif self.player.id_in_group == 2: return { 'impact_rank': models.Rank.objects.filter(period_number=4, type=2, group_id=self.player.group_id ).order_by('rank').annotate(label=F('label_for_2')) } elif self.player.id_in_group == 3: return { 'impact_rank': models.Rank.objects.filter(period_number=4, type=2, group_id=self.player.group_id ).order_by('rank').annotate(label=F('label_for_3')) } elif self.player.id_in_group == 4: return { 'impact_rank': models.Rank.objects.filter(period_number=4, type=2, group_id=self.player.group_id ).order_by('rank').annotate(label=F('label_for_4')) } elif self.player.id_in_group == 5: return { 'impact_rank': models.Rank.objects.filter(period_number=4, type=2, group_id=self.player.group_id ).order_by('rank').annotate(label=F('label_for_5')) } elif self.player.condition == 4: if self.player.id_in_group == 1: return { 'dollar_rank': models.Rank.objects.filter(period_number=4, type=1, group_id=self.player.group_id ).order_by('rank').annotate(label=F('label_for_1')), 'impact_rank': models.Rank.objects.filter(period_number=4, type=2, group_id=self.player.group_id ).order_by('rank').annotate(label=F('label_for_1')) } elif self.player.id_in_group == 2: return { 'dollar_rank': models.Rank.objects.filter(period_number=4, type=1, group_id=self.player.group_id ).order_by('rank').annotate(label=F('label_for_2')), 'impact_rank': models.Rank.objects.filter(period_number=4, type=2, group_id=self.player.group_id ).order_by('rank').annotate(label=F('label_for_2')) } elif self.player.id_in_group == 3: return { 'dollar_rank': models.Rank.objects.filter(period_number=4, type=1, group_id=self.player.group_id ).order_by('rank').annotate(label=F('label_for_3')), 'impact_rank': models.Rank.objects.filter(period_number=4, type=2, group_id=self.player.group_id ).order_by('rank').annotate(label=F('label_for_3')) } elif self.player.id_in_group == 4: return { 'dollar_rank': models.Rank.objects.filter(period_number=4, type=1, group_id=self.player.group_id ).order_by('rank').annotate(label=F('label_for_4')), 'impact_rank': models.Rank.objects.filter(period_number=4, type=2, group_id=self.player.group_id ).order_by('rank').annotate(label=F('label_for_4')) } elif self.player.id_in_group == 5: return { 'dollar_rank': models.Rank.objects.filter(period_number=4, type=1, group_id=self.player.group_id ).order_by('rank').annotate(label=F('label_for_5')), 'impact_rank': models.Rank.objects.filter(period_number=4, type=2, group_id=self.player.group_id ).order_by('rank').annotate(label=F('label_for_5')) } elif self.player.condition == 5: if self.player.id_in_group == 1: return { 'return_rank': models.Rank.objects.filter(period_number=4, type=3, group_id=self.player.group_id ).order_by('rank').annotate(label=F('label_for_1')) } elif self.player.id_in_group == 2: return { 'return_rank': models.Rank.objects.filter(period_number=4, type=3, group_id=self.player.group_id ).order_by('rank').annotate(label=F('label_for_2')) } elif self.player.id_in_group == 3: return { 'return_rank': models.Rank.objects.filter(period_number=4, type=3, group_id=self.player.group_id ).order_by('rank').annotate(label=F('label_for_3')) } elif self.player.id_in_group == 4: return { 'return_rank': models.Rank.objects.filter(period_number=4, type=3, group_id=self.player.group_id ).order_by('rank').annotate(label=F('label_for_4')) } elif self.player.id_in_group == 5: return { 'return_rank': models.Rank.objects.filter(period_number=4, type=3, group_id=self.player.group_id ).order_by('rank').annotate(label=F('label_for_5')) } def before_next_page(self): # Update player ranks for data purposes if self.player.condition == 2 or self.player.condition == 4: own_rank = models.Rank.objects.filter(group_id=self.player.group_id, player_id=self.player.id_in_group, period_number=4, type=1)[0] self.player.p4_dollar_rank = own_rank.rank if self.player.condition == 3 or self.player.condition == 4: own_rank = models.Rank.objects.filter(group_id=self.player.group_id, player_id=self.player.id_in_group, period_number=4, type=2)[0] self.player.p4_impact_rank = own_rank.rank if self.player.condition == 5: own_rank = models.Rank.objects.filter(group_id=self.player.group_id, player_id=self.player.id_in_group, period_number=4, type=3)[0] self.player.p4_return_rank = own_rank.rank # Draws for state/national projects from pay period state_project_set = (0, 1, 1) national_project_set = (0, 0, 1) charity_payment = 0 self.player.state_project_payoff = random.choice(state_project_set) self.player.national_project_payoff = random.choice(national_project_set) if self.player.pay_period == 1: charity_payment = charity_payment + round((self.player.p1_dollars_invested * self.player.p1_local_weight * 2), 2) if self.player.state_project_payoff == 1: charity_payment = charity_payment + round((self.player.p1_dollars_invested * self.player.p1_state_weight * 3), 2) if self.player.national_project_payoff == 1: charity_payment = charity_payment + round((self.player.p1_dollars_invested * self.player.p1_national_weight * 6), 2) elif self.player.pay_period == 2: charity_payment = charity_payment + round((self.player.p2_dollars_invested * self.player.p2_local_weight * 2), 2) if self.player.state_project_payoff == 1: charity_payment = charity_payment + round((self.player.p2_dollars_invested * self.player.p2_state_weight * 3), 2) if self.player.national_project_payoff == 1: charity_payment = charity_payment + round((self.player.p2_dollars_invested * self.player.p2_national_weight * 6), 2) elif self.player.pay_period == 3: charity_payment = charity_payment + round((self.player.p3_dollars_invested * self.player.p3_local_weight * 2), 2) if self.player.state_project_payoff == 1: charity_payment = charity_payment + round((self.player.p3_dollars_invested * self.player.p3_state_weight * 3), 2) if self.player.national_project_payoff == 1: charity_payment = charity_payment + round((self.player.p3_dollars_invested * self.player.p3_national_weight * 6), 2) elif self.player.pay_period == 4: charity_payment = charity_payment + round((self.player.p4_dollars_invested * self.player.p4_local_weight * 2), 2) if self.player.state_project_payoff == 1: charity_payment = charity_payment + round((self.player.p4_dollars_invested * self.player.p4_state_weight * 3), 2) if self.player.national_project_payoff == 1: charity_payment = charity_payment + round((self.player.p4_dollars_invested * self.player.p4_national_weight * 6), 2) self.player.charity_payment = round((charity_payment/100), 2) class PEQ1(Page): form_model = models.Player form_fields = ['feeling_performance', 'ranking_salience', 'ranking_concern', 'ranking_interference', 'high_investment_desire', 'high_impact_desire', 'high_return_desire', 'look_good_concern', 'investment_comfort', 'impact_comfort', 'charitability_image', 'importance_prob_success', 'charity_inv_preference'] class PEQ2(Page): form_model = models.Player form_fields = ['risk_attitude', 'csr_importance', 'general_charity_importance', 'charity_identification', 'relative_importance_investment', 'project_failure_guilt', 'non_maximizing_guilt', 'investment_decision_difficulty', 'impact_decision_difficulty', 'ranking_processing_difficulty', 'inc_return_factors', 'inc_return_extent', 'company_attachment', 'peer_attachment', 'investment_strategy', 'strategy_change', 'gender', 'age', 'major'] class ExitResults(Page): def vars_for_template(self): if self.player.pay_period == 1: return { 'decision_comp': self.player.p1_dollars_kept, 'comp_total': self.player.p1_dollars_kept + 1.00, 'pay_period_investment': self.player.p1_dollars_invested, 'local_percentage': self.player.p1_local_weight, 'state_percentage': self.player.p1_state_weight, 'national_percentage': self.player.p1_national_weight } elif self.player.pay_period == 2: return { 'decision_comp': self.player.p2_dollars_kept, 'comp_total': self.player.p2_dollars_kept + 1.00, 'pay_period_investment': self.player.p2_dollars_invested, 'local_percentage': self.player.p2_local_weight, 'state_percentage': self.player.p2_state_weight, 'national_percentage': self.player.p2_national_weight } elif self.player.pay_period == 3: return { 'decision_comp': self.player.p3_dollars_kept, 'comp_total': self.player.p3_dollars_kept + 1.00, 'pay_period_investment': self.player.p3_dollars_invested, 'local_percentage': self.player.p3_local_weight, 'state_percentage': self.player.p3_state_weight, 'national_percentage': self.player.p3_national_weight } elif self.player.pay_period == 4: return { 'decision_comp': self.player.p4_dollars_kept, 'comp_total': self.player.p4_dollars_kept + 1.00, 'pay_period_investment': self.player.p4_dollars_invested, 'local_percentage': self.player.p4_local_weight, 'state_percentage': self.player.p4_state_weight, 'national_percentage': self.player.p4_national_weight } page_sequence = [ IC, IC_Decline, DuplicateWorker, GenInstructions, TaskInstructions, Projects, PerformanceReports, Compensation, KnowledgeCheck, ArrivalWait, PracticePeriod, DecisionWait, PracticeInterim, ArrivalWait, PracticeResult, CharitySelection, ArrivalWait, Period1, DecisionWait, P1Interim, ArrivalWait, P1Result, ArrivalWait, Period2, DecisionWait, P2Interim, ArrivalWait, P2Result, ArrivalWait, Period3, DecisionWait, P3Interim, ArrivalWait, P3Result, ArrivalWait, Period4, DecisionWait, P4Interim, ArrivalWait, P4Result, PEQ1, PEQ2, ExitResults ]