from ._builtin import Page, WaitPage from otree.api import Currency as c, currency_range from .models import Constants import statistics import math class WaitForShuffle(WaitPage): group_by_arrival_time = True class Victim(WaitPage): after_all_players_arrive = 'set_victim' class NextRound1(Page): timeout_seconds = 10 def vars_for_template(self): return dict(round_number=self.round_number) class VictimQ1(Page): form_model = 'player' form_fields = ['feelings1_1'] def vars_for_template(self): return dict(id_in_group=self.player.id_in_group, victim=self.group.victim) class DivisionInfoVictim(Page): form_model = 'player' form_fields = ['divisionP1', 'compensationP1victim'] def is_displayed(self): return (self.player.id_in_group == self.group.victim) def vars_for_template(self): return dict(round_number = self.round_number, id_in_group=self.player.id_in_group, victim = self.group.victim) class DivisionInfoOthers(Page): form_model = 'player' form_fields = ['divisionP1', 'compensationP1'] def is_displayed(self): return (self.player.id_in_group != self.group.victim) def vars_for_template(self): return dict(round_number = self.round_number, id_in_group=self.player.id_in_group, victim = self.group.victim) class WaitForPlayers(WaitPage): pass class IncomeDivisionQ1(Page): timeout_seconds = 180 #なおす def vars_for_template(self): return dict(victim = self.group.victim,id_in_group=self.player.id_in_group) class PersonalP2Victim(Page): form_model = 'player' form_fields = ['divisionP2', 'compensationP2victim'] def is_displayed(self): return (self.player.id_in_group == self.group.victim) def vars_for_template(self): return dict(id_in_group = self.player.id_in_group, victim = self.group.victim) class PersonalP2Others(Page): form_model = 'player' form_fields = ['divisionP2', 'compensationP2'] def is_displayed(self): return (self.player.id_in_group != self.group.victim) def vars_for_template(self): return dict(id_in_group=self.player.id_in_group, victim = self.group.victim) class WaitForDivision(WaitPage): after_all_players_arrive = 'set_division' class WaitForFailure(WaitPage): after_all_players_arrive = 'set_failure' class IncomeDivisionR0(Page): def is_displayed(self): return (self.round_number != 1) def vars_for_template(self): return dict(divisionR=self.group.divisionR, round_number = self.round_number, border = self.group.border, id_in_group = self.player.id_in_group, victim = self.group.victim) form_model = 'player' form_fields = ['discussion','checking','feelings2_1','feelings2_2','concession1', 'concession2'] class Game1Info(Page): form_model = 'player' form_fields = ['max1'] def vars_for_template(self): return dict(id_in_group=self.player.id_in_group, victim = self.group.victim, divisionR=self.group.divisionR, border = self.group.border, round_number = self.round_number) class GameWait1(WaitPage): after_all_players_arrive = 'set_que1' class Game1(Page): timeout_seconds = 30 form_model = 'player' form_fields = ['ans1A', 'ans1B', 'ans1C', 'ans1D', 'ans1E', 'ans1F', 'ans1G', 'ans1H', 'ans1I', 'ans1J', 'ans1K', 'ans1L', 'ans1M', 'ans1N', 'ans1O', 'ans1P', 'ans1Q', 'ans1R', 'ans1S', 'ans1T' ] def vars_for_template(self): return dict(que1A1=self.player.que1A1, que1B1=self.player.que1B1, que1C1=self.player.que1C1, que1D1=self.player.que1D1, que1E1=self.player.que1E1, que1F1=self.player.que1F1, que1G1=self.player.que1G1, que1H1=self.player.que1H1, que1I1=self.player.que1I1, que1J1=self.player.que1J1, que1K1=self.player.que1K1, que1L1=self.player.que1L1, que1M1=self.player.que1M1, que1N1=self.player.que1N1, que1O1=self.player.que1O1, que1P1=self.player.que1P1, que1Q1=self.player.que1Q1, que1R1=self.player.que1R1, que1S1=self.player.que1S1, que1T1=self.player.que1T1, que1A2=self.player.que1A2, que1B2=self.player.que1B2, que1C2=self.player.que1C2, que1D2=self.player.que1D2, que1E2=self.player.que1E2, que1F2=self.player.que1F2, que1G2=self.player.que1G2, que1H2=self.player.que1H2, que1I2=self.player.que1I2, que1J2=self.player.que1J2, que1K2=self.player.que1K2, que1L2=self.player.que1L2, que1M2=self.player.que1M2, que1N2=self.player.que1N2, que1O2=self.player.que1O2, que1P2=self.player.que1P2, que1Q2=self.player.que1Q2, que1R2=self.player.que1R2, que1S2=self.player.que1S2, que1T2=self.player.que1T2, id_in_group = self.player.id_in_group, victim = self.group.victim, round_number = self.round_number ) class ResultsWaitPage1(WaitPage): after_all_players_arrive = 'set_earning1' class Game1Results1(Page): def vars_for_template(self): return dict(earning1 = self.player.earning1, border=self.group.border, id_in_group=self.player.id_in_group, victim = self.group.victim, divisionR=self.group.divisionR, round_number = self.round_number) class CompensationWaitPage(WaitPage): after_all_players_arrive = 'set_compensation' class IncomeDivisionR1(Page): def is_displayed(self): return (self.round_number == 1) def vars_for_template(self): return dict(divisionR=self.group.divisionR, round_number = self.round_number, border = self.group.border, id_in_group = self.player.id_in_group, victim = self.group.victim) form_model = 'player' form_fields = ['discussion','checking','feelings2_1','feelings2_2','concession1', 'concession2'] class Compensation(Page): def vars_for_template(self): return dict(payingcompensationR = self.player.payingcompensationR, receivingcompensationR= self.player.receivingcompensationR, victim = self.group.victim,id_in_group=self.player.id_in_group, divisionR=self.group.divisionR, border = self.group.border, compensationR = self.group.compensationR,compensationRv = self.group.compensationRv, compensationP2 = self.player.compensationP2, compensationP2victim = -1*self.player.compensationP2victim, round_number = self.round_number) def is_displayed(self): return (self.group.border>=0) form_model = 'player' form_fields = ['feelings3_1','feelings3_2'] class Game2Info(Page): form_model = 'player' form_fields = ['max2'] def vars_for_template(self): return dict(id_in_group=self.player.id_in_group, victim = self.group.victim, divisionR=self.group.divisionR, border = self.group.border, compensationR = self.group.compensationR,compensationRv = self.group.compensationRv, compensationP2 = self.player.compensationP2, compensationP2victim = -1*self.player.compensationP2victim, round_number = self.round_number) class GameWait2(WaitPage): after_all_players_arrive = 'set_que2' class Game2(Page): timeout_seconds = 30 #なおす form_model = 'player' form_fields = ['ans2A', 'ans2B', 'ans2C', 'ans2D', 'ans2E', 'ans2F', 'ans2G', 'ans2H', 'ans2I', 'ans2J', 'ans2K', 'ans2L', 'ans2M', 'ans2N', 'ans2O', 'ans2P', 'ans2Q', 'ans2R', 'ans2S', 'ans2T' ] def vars_for_template(self): return dict(que2A1=self.player.que2A1, que2B1=self.player.que2B1, que2C1=self.player.que2C1, que2D1=self.player.que2D1, que2E1=self.player.que2E1, que2F1=self.player.que2F1, que2G1=self.player.que2G1, que2H1=self.player.que2H1, que2I1=self.player.que2I1, que2J1=self.player.que2J1, que2K1=self.player.que2K1, que2L1=self.player.que2L1, que2M1=self.player.que2M1, que2N1=self.player.que2N1, que2O1=self.player.que2O1, que2P1=self.player.que2P1, que2Q1=self.player.que2Q1, que2R1=self.player.que2R1, que2S1=self.player.que2S1, que2T1=self.player.que2T1, que2A2=self.player.que2A2, que2B2=self.player.que2B2, que2C2=self.player.que2C2, que2D2=self.player.que2D2, que2E2=self.player.que2E2, que2F2=self.player.que2F2, que2G2=self.player.que2G2, que2H2=self.player.que2H2, que2I2=self.player.que2I2, que2J2=self.player.que2J2, que2K2=self.player.que2K2, que2L2=self.player.que2L2, que2M2=self.player.que2M2, que2N2=self.player.que2N2, que2O2=self.player.que2O2, que2P2=self.player.que2P2, que2Q2=self.player.que2Q2, que2R2=self.player.que2R2, que2S2=self.player.que2S2, que2T2=self.player.que2T2, id_in_group=self.player.id_in_group, victim = self.group.victim ) class ResultsWaitPage3(WaitPage): after_all_players_arrive = 'set_earning2' class ResultsWaitPage5(WaitPage): after_all_players_arrive = 'set_payoffs' class Game2Results1(Page): def vars_for_template(self): return dict(id_in_group = self.player.id_in_group, earning2 = self.player.earning2, victim = self.group.victim, divisionR=self.group.divisionR, border = self.group.border, compensationRv = self.group.compensationRv,compensationR = self.group.compensationR, compensationP2 = self.player.compensationP2, compensationP2victim = -1*self.player.compensationP2victim, round_number = self.round_number) class Results1(Page): form_model = 'player' form_fields = ['feelings4_1', 'feelings4_2'] def vars_for_template(self): return dict(payoff=self.player.payoff, id_in_group=self.player.id_in_group, victim = self.group.victim, divisionR=self.group.divisionR, border = self.group.border, compensationR = self.group.compensationR,compensationRv = self.group.compensationRv, compensationP2 = self.player.compensationP2, compensationP2victim = -1*self.player.compensationP2victim, round_number = self.round_number, aveincome = self.participant.vars['aveincome']) class Stop(Page): def is_displayed(self): return (self.round_number != 4) page_sequence = [WaitForShuffle, Victim, NextRound1, VictimQ1, DivisionInfoVictim, DivisionInfoOthers, WaitForPlayers, IncomeDivisionQ1, PersonalP2Victim, PersonalP2Others, WaitForDivision, WaitForFailure, GameWait1, GameWait2, IncomeDivisionR0, Game1Info, Game1, ResultsWaitPage1, Game1Results1, CompensationWaitPage, IncomeDivisionR1, Compensation, Game2Info, Game2, ResultsWaitPage3, ResultsWaitPage5, Game2Results1, Results1, Stop ]