from otree.api import Currency as c, currency_range from ._builtin import Page, WaitPage from .models import Constants import pandas as pd bookkeeper_odds_df = pd.read_excel('prescreening_UK/bookkeeper_odds.xlsx') class MatchBet_a_Change(Page): form_model = 'player' form_fields = ['matchbet_1_change_win', 'matchbet_1_change_draw', 'matchbet_1_change_lose', 'matchbet_1_change_sum', 'match_1_changechoice', 'MatchBet_a_change_time'] def vars_for_template(self): home_team_abbv = bookkeeper_odds_df['match1_home_team_abbv'].iloc[0] away_team_abbv = bookkeeper_odds_df['match1_away_team_abbv'].iloc[0] win_prob = self.player.participant.vars['match_1_win'] lose_prob = self.player.participant.vars['match_1_lose'] draw_prob = self.player.participant.vars['match_1_draw'] win_payout_subj = round( self.player.participant.vars['match_1_win'] / 100 * self.player.participant.vars['matchbet_1_winodds'], 2) lose_payout_subj = round( self.player.participant.vars['match_1_lose'] / 100 * self.player.participant.vars['matchbet_1_loseodds'], 2) draw_payout_subj = round( self.player.participant.vars['match_1_draw'] / 100 * self.player.participant.vars['matchbet_1_drawodds'], 2) bm_probhome = 1 / bookkeeper_odds_df['match1_home_team_odds'].iloc[0] bm_probdraw = 1 / bookkeeper_odds_df['match1_draw_odds'].iloc[0] bm_probaway = 1 / bookkeeper_odds_df['match1_away_team_odds'].iloc[0] scaling_factor = bm_probhome + bm_probdraw + bm_probaway win_prob_bm = int(round(100 * bm_probhome / scaling_factor)) lose_prob_bm = int(round(100 * bm_probaway / scaling_factor)) draw_prob_bm = int(round(100 * bm_probdraw / scaling_factor)) if self.player.participant.vars['wedge1'] == 0: win_payout_bm = 1 lose_payout_bm = 1 draw_payout_bm = 1 else: win_payout_bm = round(win_prob_bm / 100 * self.player.participant.vars['matchbet_1_winodds'], 2) lose_payout_bm = round(lose_prob_bm / 100 * self.player.participant.vars['matchbet_1_loseodds'], 2) draw_payout_bm = round(draw_prob_bm / 100 * self.player.participant.vars['matchbet_1_drawodds'], 2) return dict( match_num=self.player.participant.vars['task_rounds']['A'], treat = self.player.participant.vars['treat'], wedge1 = self.player.participant.vars['wedge1'], home_team=bookkeeper_odds_df['match1_home_team'].iloc[0], away_team=bookkeeper_odds_df['match1_away_team'].iloc[0], home_team_abbv=home_team_abbv, away_team_abbv=away_team_abbv, home_team_odds=self.player.participant.vars['matchbet_1_winodds'], draw_odds=self.player.participant.vars['matchbet_1_drawodds'], away_team_odds=self.player.participant.vars['matchbet_1_loseodds'], win_bet=self.player.participant.vars['matchbet_1_win'], draw_bet=self.player.participant.vars['matchbet_1_draw'], lose_bet=self.player.participant.vars['matchbet_1_lose'], win_prob=win_prob, draw_prob=draw_prob, lose_prob=lose_prob, win_payout_subj=win_payout_subj, draw_payout_subj=draw_payout_subj, lose_payout_subj=lose_payout_subj, win_prob_bm=win_prob_bm, draw_prob_bm=draw_prob_bm, lose_prob_bm=lose_prob_bm, win_payout_bm=win_payout_bm, draw_payout_bm=draw_payout_bm, lose_payout_bm=lose_payout_bm, max_option_subj="a home win by " + home_team_abbv if win_payout_subj == max(win_payout_subj, lose_payout_subj, draw_payout_subj) else "an away win by " + away_team_abbv if lose_payout_subj == max( win_payout_subj, lose_payout_subj, draw_payout_subj) else "a draw", max_option_bm="a home win by " + home_team_abbv if win_payout_bm == max(win_payout_bm, lose_payout_bm, draw_payout_bm) else "an away win by " + away_team_abbv if lose_payout_bm == max( win_payout_bm, lose_payout_bm, draw_payout_bm) else "a draw" ) def error_message(self, values): if values['match_1_changechoice'] == "Yes" and values['matchbet_1_change_sum'] != 100: return 'Please enter your updated bets' if values['match_1_changechoice'] == "No" and values['matchbet_1_change_sum'] != 0: return 'Please enter 0 for all the tokens or leave them blank if you do not wish to change your previous bets' def is_displayed(self): return self.player.round_number == self.player.participant.vars['task_rounds']['A'] def before_next_page(self): self.player.participant.vars['matchbet_1_change_win'] = self.player.matchbet_1_change_win self.player.participant.vars['matchbet_1_change_draw'] = self.player.matchbet_1_change_draw self.player.participant.vars['matchbet_1_change_lose'] = self.player.matchbet_1_change_lose class MatchBet_b_Change(Page): form_model = 'player' form_fields = ['matchbet_2_change_win', 'matchbet_2_change_draw', 'matchbet_2_change_lose', 'matchbet_2_change_sum', 'match_2_changechoice', 'MatchBet_b_change_time'] def vars_for_template(self): home_team_abbv = bookkeeper_odds_df['match2_home_team_abbv'].iloc[0] away_team_abbv = bookkeeper_odds_df['match2_away_team_abbv'].iloc[0] win_prob = self.player.participant.vars['match_2_win'] lose_prob = self.player.participant.vars['match_2_lose'] draw_prob = self.player.participant.vars['match_2_draw'] win_payout_subj = round( self.player.participant.vars['match_2_win'] / 100 * self.player.participant.vars['matchbet_2_winodds'], 2) lose_payout_subj = round( self.player.participant.vars['match_2_lose'] / 100 * self.player.participant.vars['matchbet_2_loseodds'], 2) draw_payout_subj = round( self.player.participant.vars['match_2_draw'] / 100 * self.player.participant.vars['matchbet_2_drawodds'], 2) bm_probhome = 1 / bookkeeper_odds_df['match2_home_team_odds'].iloc[0] bm_probdraw = 1 / bookkeeper_odds_df['match2_draw_odds'].iloc[0] bm_probaway = 1 / bookkeeper_odds_df['match2_away_team_odds'].iloc[0] scaling_factor = bm_probhome + bm_probdraw + bm_probaway win_prob_bm = int(round(100 * bm_probhome / scaling_factor)) lose_prob_bm = int(round(100 * bm_probaway / scaling_factor)) draw_prob_bm = int(round(100 * bm_probdraw / scaling_factor)) if self.player.participant.vars['wedge2'] == 0: win_payout_bm = 1 lose_payout_bm = 1 draw_payout_bm = 1 else: win_payout_bm = round(win_prob_bm / 100 * self.player.participant.vars['matchbet_2_winodds'], 2) lose_payout_bm = round(lose_prob_bm / 100 * self.player.participant.vars['matchbet_2_loseodds'], 2) draw_payout_bm = round(draw_prob_bm / 100 * self.player.participant.vars['matchbet_2_drawodds'], 2) return dict( match_num=self.player.participant.vars['task_rounds']['B'], treat = self.player.participant.vars['treat'], wedge2 = self.player.participant.vars['wedge2'], home_team=bookkeeper_odds_df['match2_home_team'].iloc[0], away_team=bookkeeper_odds_df['match2_away_team'].iloc[0], home_team_abbv=home_team_abbv, away_team_abbv=away_team_abbv, home_team_odds=self.player.participant.vars['matchbet_2_winodds'], draw_odds=self.player.participant.vars['matchbet_2_drawodds'], away_team_odds=self.player.participant.vars['matchbet_2_loseodds'], win_bet=self.player.participant.vars['matchbet_2_win'], draw_bet=self.player.participant.vars['matchbet_2_draw'], lose_bet=self.player.participant.vars['matchbet_2_lose'], win_prob=win_prob, draw_prob=draw_prob, lose_prob=lose_prob, win_payout_subj=win_payout_subj, draw_payout_subj=draw_payout_subj, lose_payout_subj=lose_payout_subj, win_prob_bm=win_prob_bm, draw_prob_bm=draw_prob_bm, lose_prob_bm=lose_prob_bm, win_payout_bm=win_payout_bm, draw_payout_bm=draw_payout_bm, lose_payout_bm=lose_payout_bm, max_option_subj="a home win by " + home_team_abbv if win_payout_subj == max(win_payout_subj, lose_payout_subj, draw_payout_subj) else "an away win by " + away_team_abbv if lose_payout_subj == max( win_payout_subj, lose_payout_subj, draw_payout_subj) else "a draw", max_option_bm="a home win by " + home_team_abbv if win_payout_bm == max(win_payout_bm, lose_payout_bm, draw_payout_bm) else "an away win by " + away_team_abbv if lose_payout_bm == max( win_payout_bm, lose_payout_bm, draw_payout_bm) else "a draw" ) def error_message(self, values): if values['match_2_changechoice'] == "Yes" and values['matchbet_2_change_sum'] != 100: return 'Please enter your updated bets' if values['match_2_changechoice'] == "No" and values['matchbet_2_change_sum'] != 0: return 'Please enter 0 for all the tokens or leave them blank if you do not wish to change your previous bets' def is_displayed(self): return self.player.round_number == self.player.participant.vars['task_rounds']['B'] def before_next_page(self): self.player.participant.vars['matchbet_2_change_win'] = self.player.matchbet_2_change_win self.player.participant.vars['matchbet_2_change_draw'] = self.player.matchbet_2_change_draw self.player.participant.vars['matchbet_2_change_lose'] = self.player.matchbet_2_change_lose class MatchBet_c_Change(Page): form_model = 'player' form_fields = ['matchbet_3_change_win', 'matchbet_3_change_draw', 'matchbet_3_change_lose', 'matchbet_3_change_sum', 'match_3_changechoice', 'MatchBet_c_change_time'] def vars_for_template(self): home_team_abbv = bookkeeper_odds_df['match3_home_team_abbv'].iloc[0] away_team_abbv = bookkeeper_odds_df['match3_away_team_abbv'].iloc[0] win_prob = self.player.participant.vars['match_3_win'] lose_prob = self.player.participant.vars['match_3_lose'] draw_prob = self.player.participant.vars['match_3_draw'] win_payout_subj = round( self.player.participant.vars['match_3_win'] / 100 * self.player.participant.vars['matchbet_3_winodds'], 2) lose_payout_subj = round( self.player.participant.vars['match_3_lose'] / 100 * self.player.participant.vars['matchbet_3_loseodds'], 2) draw_payout_subj = round( self.player.participant.vars['match_3_draw'] / 100 * self.player.participant.vars['matchbet_3_drawodds'], 2) bm_probhome = 1 / bookkeeper_odds_df['match3_home_team_odds'].iloc[0] bm_probdraw = 1 / bookkeeper_odds_df['match3_draw_odds'].iloc[0] bm_probaway = 1 / bookkeeper_odds_df['match3_away_team_odds'].iloc[0] scaling_factor = bm_probhome + bm_probdraw + bm_probaway win_prob_bm = int(round(100 * bm_probhome / scaling_factor)) lose_prob_bm = int(round(100 * bm_probaway / scaling_factor)) draw_prob_bm = int(round(100 * bm_probdraw / scaling_factor)) if self.player.participant.vars['wedge3'] == 0: win_payout_bm = 1 lose_payout_bm = 1 draw_payout_bm = 1 else: win_payout_bm = round(win_prob_bm / 100 * self.player.participant.vars['matchbet_3_winodds'], 2) lose_payout_bm = round(lose_prob_bm / 100 * self.player.participant.vars['matchbet_3_loseodds'], 2) draw_payout_bm = round(draw_prob_bm / 100 * self.player.participant.vars['matchbet_3_drawodds'], 2) return dict( match_num=self.player.participant.vars['task_rounds']['C'], treat=self.player.participant.vars['treat'], wedge3=self.player.participant.vars['wedge3'], home_team=bookkeeper_odds_df['match3_home_team'].iloc[0], away_team=bookkeeper_odds_df['match3_away_team'].iloc[0], home_team_abbv=home_team_abbv, away_team_abbv=away_team_abbv, home_team_odds=self.player.participant.vars['matchbet_3_winodds'], draw_odds=self.player.participant.vars['matchbet_3_drawodds'], away_team_odds=self.player.participant.vars['matchbet_3_loseodds'], win_bet=self.player.participant.vars['matchbet_3_win'], draw_bet=self.player.participant.vars['matchbet_3_draw'], lose_bet=self.player.participant.vars['matchbet_3_lose'], win_prob=win_prob, draw_prob=draw_prob, lose_prob=lose_prob, win_payout_subj=win_payout_subj, draw_payout_subj=draw_payout_subj, lose_payout_subj=lose_payout_subj, win_prob_bm=win_prob_bm, draw_prob_bm=draw_prob_bm, lose_prob_bm=lose_prob_bm, win_payout_bm=win_payout_bm, draw_payout_bm=draw_payout_bm, lose_payout_bm=lose_payout_bm, max_option_subj="a home win by " + home_team_abbv if win_payout_subj == max(win_payout_subj, lose_payout_subj, draw_payout_subj) else "an away win by " + away_team_abbv if lose_payout_subj == max( win_payout_subj, lose_payout_subj, draw_payout_subj) else "a draw", max_option_bm="a home win by " + home_team_abbv if win_payout_bm == max(win_payout_bm, lose_payout_bm, draw_payout_bm) else "an away win by " + away_team_abbv if lose_payout_bm == max( win_payout_bm, lose_payout_bm, draw_payout_bm) else "a draw" ) def error_message(self, values): if values['match_3_changechoice'] == "Yes" and values['matchbet_3_change_sum'] != 100: return 'Please enter your updated bets' if values['match_3_changechoice'] == "No" and values['matchbet_3_change_sum'] != 0: return 'Please enter 0 for all the tokens or leave them blank if you do not wish to change your previous bets' def is_displayed(self): return self.player.round_number == self.player.participant.vars['task_rounds']['C'] def before_next_page(self): self.player.participant.vars['matchbet_3_change_win'] = self.player.matchbet_3_change_win self.player.participant.vars['matchbet_3_change_draw'] = self.player.matchbet_3_change_draw self.player.participant.vars['matchbet_3_change_lose'] = self.player.matchbet_3_change_lose class MatchBet_d_Change(Page): form_model = 'player' form_fields = ['matchbet_4_change_win', 'matchbet_4_change_draw', 'matchbet_4_change_lose', 'matchbet_4_change_sum', 'match_4_changechoice', 'MatchBet_d_change_time'] def vars_for_template(self): home_team_abbv = bookkeeper_odds_df['match4_home_team_abbv'].iloc[0] away_team_abbv = bookkeeper_odds_df['match4_away_team_abbv'].iloc[0] win_prob = self.player.participant.vars['match_4_win'] lose_prob = self.player.participant.vars['match_4_lose'] draw_prob = self.player.participant.vars['match_4_draw'] win_payout_subj = round(self.player.participant.vars['match_4_win'] / 100 * self.player.participant.vars['matchbet_4_winodds'], 2) lose_payout_subj = round(self.player.participant.vars['match_4_lose'] / 100 * self.player.participant.vars['matchbet_4_loseodds'], 2) draw_payout_subj = round(self.player.participant.vars['match_4_draw'] / 100 * self.player.participant.vars['matchbet_4_drawodds'], 2) bm_probhome = 1 / bookkeeper_odds_df['match4_home_team_odds'].iloc[0] bm_probdraw = 1 / bookkeeper_odds_df['match4_draw_odds'].iloc[0] bm_probaway = 1 / bookkeeper_odds_df['match4_away_team_odds'].iloc[0] scaling_factor = bm_probhome + bm_probdraw + bm_probaway win_prob_bm = int(round(100 * bm_probhome / scaling_factor)) lose_prob_bm = int(round(100 * bm_probaway / scaling_factor)) draw_prob_bm = int(round(100 * bm_probdraw / scaling_factor)) if self.player.participant.vars['wedge4']== 0: win_payout_bm = 1 lose_payout_bm = 1 draw_payout_bm = 1 else: win_payout_bm = round(win_prob_bm / 100 * self.player.participant.vars['matchbet_4_winodds'], 2) lose_payout_bm = round(lose_prob_bm / 100 * self.player.participant.vars['matchbet_4_loseodds'], 2) draw_payout_bm = round(draw_prob_bm / 100 * self.player.participant.vars['matchbet_4_drawodds'], 2) return dict( match_num = self.player.participant.vars['task_rounds']['D'], treat=self.player.participant.vars['treat'], wedge4=self.player.participant.vars['wedge4'], home_team=bookkeeper_odds_df['match4_home_team'].iloc[0], away_team=bookkeeper_odds_df['match4_away_team'].iloc[0], home_team_abbv=home_team_abbv, away_team_abbv=away_team_abbv, home_team_odds=self.player.participant.vars['matchbet_4_winodds'], draw_odds=self.player.participant.vars['matchbet_4_drawodds'], away_team_odds=self.player.participant.vars['matchbet_4_loseodds'], win_bet=self.player.participant.vars['matchbet_4_win'], draw_bet=self.player.participant.vars['matchbet_4_draw'], lose_bet=self.player.participant.vars['matchbet_4_lose'], win_prob=win_prob, draw_prob=draw_prob, lose_prob=lose_prob, win_payout_subj=win_payout_subj, draw_payout_subj=draw_payout_subj, lose_payout_subj=lose_payout_subj, win_prob_bm=win_prob_bm, draw_prob_bm=draw_prob_bm, lose_prob_bm=lose_prob_bm, win_payout_bm=win_payout_bm, draw_payout_bm=draw_payout_bm, lose_payout_bm=lose_payout_bm, max_option_subj="a home win by " + home_team_abbv if win_payout_subj == max(win_payout_subj, lose_payout_subj, draw_payout_subj) else "an away win by " + away_team_abbv if lose_payout_subj == max( win_payout_subj, lose_payout_subj, draw_payout_subj) else "a draw", max_option_bm="a home win by " + home_team_abbv if win_payout_bm == max(win_payout_bm, lose_payout_bm, draw_payout_bm) else "an away win by " + away_team_abbv if lose_payout_bm == max( win_payout_bm, lose_payout_bm, draw_payout_bm) else "a draw" ) def error_message(self, values): if values['match_4_changechoice'] == "Yes" and values['matchbet_4_change_sum'] != 100: return 'Please enter your updated bets' if values['match_4_changechoice'] == "No" and values['matchbet_4_change_sum'] != 0: return 'Please enter 0 for all the tokens or leave them blank if you do not wish to change your previous bets' def is_displayed(self): return self.player.round_number == self.player.participant.vars['task_rounds']['D'] def before_next_page(self): self.player.participant.vars['matchbet_4_change_win'] = self.player.matchbet_4_change_win self.player.participant.vars['matchbet_4_change_draw'] = self.player.matchbet_4_change_draw self.player.participant.vars['matchbet_4_change_lose'] = self.player.matchbet_4_change_lose page_sequence = [ MatchBet_a_Change, MatchBet_b_Change, MatchBet_c_Change, MatchBet_d_Change, ]