1
0
mirror of https://github.com/jcwimer/wrestlingApp synced 2026-04-10 23:53:06 +00:00

Fixed double elimination advancement and match after update actions.

This commit is contained in:
2020-01-27 08:34:25 -05:00
parent 5bb4febd79
commit 870c5bc7ec
3 changed files with 40 additions and 36 deletions

View File

@@ -3,15 +3,14 @@ class Match < ActiveRecord::Base
belongs_to :weight, touch: true belongs_to :weight, touch: true
belongs_to :mat, touch: true belongs_to :mat, touch: true
has_many :wrestlers, :through => :weight has_many :wrestlers, :through => :weight
after_update :after_finished_actions, :if => :saved_change_to_finished? after_update :after_finished_actions, :if => :saved_change_to_finished? or :saved_change_to_winner_id? or :saved_change_to_win_type? or :saved_change_to_score?
after_update :after_finished_actions, :if => :saved_change_to_winner_id?
after_update :after_finished_actions, :if => :saved_change_to_win_type?
after_update :after_finished_actions, :if => :saved_change_to_score?
def after_finished_actions def after_finished_actions
if self.finished == 1 && self.winner_id != nil if self.finished == 1 && self.winner_id != nil
if self.w1 && self.w2 if self.w1
wrestler1.touch wrestler1.touch
end
if self.w2
wrestler2.touch wrestler2.touch
end end
if self.mat if self.mat
@@ -77,10 +76,10 @@ class Match < ActiveRecord::Base
def advance_wrestlers def advance_wrestlers
if self.w1 if self.w1
AdvanceWrestler.new(wrestler1).advance AdvanceWrestler.new(wrestler1, self).advance
end end
if self.w2 if self.w2
AdvanceWrestler.new(wrestler2).advance AdvanceWrestler.new(wrestler2, self).advance
end end
end end

View File

@@ -1,7 +1,8 @@
class AdvanceWrestler class AdvanceWrestler
def initialize( wrestler ) def initialize( wrestler, last_match )
@wrestler = wrestler @wrestler = wrestler
@tournament = @wrestler.tournament @tournament = @wrestler.tournament
@last_match = last_match
end end
def advance def advance
@@ -14,7 +15,7 @@ class AdvanceWrestler
def advance_raw def advance_raw
pool_to_bracket_advancement if @tournament.tournament_type == "Pool to bracket" pool_to_bracket_advancement if @tournament.tournament_type == "Pool to bracket"
DoubleEliminationAdvance.new(@wrestler).bracket_advancement if @tournament.tournament_type == "Modified 16 Man Double Elimination" or DoubleEliminationAdvance.new(@wrestler, @last_match).bracket_advancement if @tournament.tournament_type == "Modified 16 Man Double Elimination" or
@tournament.tournament_type == "Double Elimination 1-6" @tournament.tournament_type == "Double Elimination 1-6"
end end

View File

@@ -1,8 +1,9 @@
class DoubleEliminationAdvance class DoubleEliminationAdvance
def initialize(wrestler) def initialize(wrestler,last_match)
@wrestler = wrestler @wrestler = wrestler
@last_match = @wrestler.last_match @last_match = last_match
@next_match_position_number = (@last_match.bracket_position_number / 2.0)
end end
def bracket_advancement def bracket_advancement
@@ -19,56 +20,59 @@ class DoubleEliminationAdvance
if (@last_match.loser1_name == "BYE" or @last_match.loser2_name == "BYE") and @last_match.is_championship_match if (@last_match.loser1_name == "BYE" or @last_match.loser2_name == "BYE") and @last_match.is_championship_match
update_consolation_bye update_consolation_bye
end end
if @wrestler.last_match.bracket_position == "Quarter" if @last_match.bracket_position == "Quarter"
new_match = Match.where("bracket_position = ? AND bracket_position_number = ? AND weight_id = ?","Semis",@wrestler.next_match_position_number.ceil,@wrestler.weight_id).first new_match = Match.where("bracket_position = ? AND bracket_position_number = ? AND weight_id = ?","Semis",@next_match_position_number.ceil,@wrestler.weight_id).first
update_new_match(new_match, get_wrestler_number) update_new_match(new_match, get_wrestler_number)
elsif @wrestler.last_match.bracket_position == "Semis" elsif @last_match.bracket_position == "Semis"
new_match = Match.where("bracket_position = ? AND bracket_position_number = ? AND weight_id = ?","1/2",@wrestler.next_match_position_number.ceil,@wrestler.weight_id).first new_match = Match.where("bracket_position = ? AND bracket_position_number = ? AND weight_id = ?","1/2",@next_match_position_number.ceil,@wrestler.weight_id).first
update_new_match(new_match, get_wrestler_number) update_new_match(new_match, get_wrestler_number)
elsif @wrestler.last_match.bracket_position == "Conso Semis" elsif @last_match.bracket_position == "Conso Semis"
# if its a regular double elim # if its a regular double elim
if Match.where("bracket_position = ? AND bracket_position_number = ? AND weight_id = ?","Conso Semis",@wrestler.next_match_position_number.ceil,@wrestler.weight_id).first.loser1_name != nil if Match.where("bracket_position = ? AND bracket_position_number = ? AND weight_id = ?","Conso Semis",@next_match_position_number.ceil,@wrestler.weight_id).first.loser1_name != nil
new_match = Match.where("bracket_position = ? AND bracket_position_number = ? AND weight_id = ?","3/4",@wrestler.next_match_position_number.ceil,@wrestler.weight_id).first new_match = Match.where("bracket_position = ? AND bracket_position_number = ? AND weight_id = ?","3/4",@next_match_position_number.ceil,@wrestler.weight_id).first
update_new_match(new_match, get_wrestler_number) update_new_match(new_match, get_wrestler_number)
# if it's a special bracket where consolations wrestler for 5th # if it's a special bracket where consolations wrestler for 5th
else else
new_match = Match.where("bracket_position = ? AND bracket_position_number = ? AND weight_id = ?","5/6",@wrestler.next_match_position_number.ceil,@wrestler.weight_id).first new_match = Match.where("bracket_position = ? AND bracket_position_number = ? AND weight_id = ?","5/6",@next_match_position_number.ceil,@wrestler.weight_id).first
update_new_match(new_match, get_wrestler_number) update_new_match(new_match, get_wrestler_number)
end end
elsif @wrestler.last_match.bracket_position == "Conso Quarter" elsif @last_match.bracket_position == "Conso Quarter"
next_round_matches = Match.where("weight_id = ? and bracket_position = ?", @wrestler.weight_id, "Conso Semis").sort_by{|m| m.round} next_round_matches = Match.where("weight_id = ? and bracket_position = ?", @wrestler.weight_id, "Conso Semis").sort_by{|m| m.round}
this_round_matches = Match.where("weight_id = ? and round = ? and bracket_position = ?", @wrestler.weight_id, @wrestler.last_match.round, "Conso Quarter") this_round_matches = Match.where("weight_id = ? and round = ? and bracket_position = ?", @wrestler.weight_id, @last_match.round, "Conso Quarter")
if next_round_matches.size == this_round_matches.size if next_round_matches.size == this_round_matches.size
# if a semi loser is dropping down # if a semi loser is dropping down
new_match = Match.where("bracket_position = ? AND bracket_position_number = ? AND weight_id = ?","Conso Semis",@wrestler.last_match.bracket_position_number,@wrestler.weight_id).first new_match = Match.where("bracket_position = ? AND bracket_position_number = ? AND weight_id = ?","Conso Semis",@last_match.bracket_position_number,@wrestler.weight_id).first
update_new_match(new_match,2) update_new_match(new_match,2)
else else
# if it's a special bracket where a semi loser is not dropping down # if it's a special bracket where a semi loser is not dropping down
new_match = Match.where("bracket_position = ? AND bracket_position_number = ? AND weight_id = ?","Conso Semis",@wrestler.next_match_position_number.ceil,@wrestler.weight_id).first new_match = Match.where("bracket_position = ? AND bracket_position_number = ? AND weight_id = ?","Conso Semis",@next_match_position_number.ceil,@wrestler.weight_id).first
update_new_match(new_match, get_wrestler_number) update_new_match(new_match, get_wrestler_number)
end end
elsif @wrestler.last_match.bracket_position == "Bracket" elsif @last_match.bracket_position == "Bracket"
new_match = Match.where("bracket_position_number = ? and weight_id = ? and round > ? and (bracket_position = ? or bracket_position = ?)", @wrestler.next_match_position_number.ceil,@wrestler.weight_id, @wrestler.last_match.round , "Bracket", "Quarter").sort_by{|m| m.round}.first new_match = Match.where("bracket_position_number = ? and weight_id = ? and round > ? and (bracket_position = ? or bracket_position = ?)", @next_match_position_number.ceil,@wrestler.weight_id, @last_match.round , "Bracket", "Quarter").sort_by{|m| m.round}.first
update_new_match(new_match, get_wrestler_number) update_new_match(new_match, get_wrestler_number)
elsif @wrestler.last_match.bracket_position == "Conso" elsif @last_match.bracket_position == "Conso"
next_round_matches = Match.where("weight_id = ? and round > ? and (bracket_position = ? or bracket_position = ?)", @wrestler.weight_id, @wrestler.last_match.round, "Conso", "Conso Quarter").sort_by{|m| m.round} next_round = next_round_matches = Match.where("weight_id = ? and round > ? and (bracket_position = ? or bracket_position = ?)", @wrestler.weight_id, @last_match.round, "Conso", "Conso Quarter").sort_by{|m| m.round}.first.round
this_round_matches = Match.where("weight_id = ? and round = ? and (bracket_position = ? or bracket_position = ?)", @wrestler.weight_id, @wrestler.last_match.round, "Conso", "Conso Quarter") next_round_matches = Match.where("weight_id = ? and round = ? and (bracket_position = ? or bracket_position = ?)", @wrestler.weight_id, next_round, "Conso", "Conso Quarter")
this_round_matches = Match.where("weight_id = ? and round = ? and (bracket_position = ? or bracket_position = ?)", @wrestler.weight_id, @last_match.round, "Conso", "Conso Quarter")
# if a loser is dropping down # if a loser is dropping down
if next_round_matches.size == this_round_matches.size if next_round_matches.size == this_round_matches.size
new_match = Match.where("bracket_position_number = ? and weight_id = ? and round > ? and (bracket_position = ? or bracket_position = ?)", @wrestler.last_match.bracket_position_number,@wrestler.weight_id, @wrestler.last_match.round, "Conso", "Conso Quarter").sort_by{|m| m.round}.first new_match = Match.where("bracket_position_number = ? and weight_id = ? and round > ? and (bracket_position = ? or bracket_position = ?)", @last_match.bracket_position_number,@wrestler.weight_id, @last_match.round, "Conso", "Conso Quarter").sort_by{|m| m.round}.first
update_new_match(new_match, 2) update_new_match(new_match, 2)
else else
new_match = Match.where("bracket_position_number = ? and weight_id = ? and round > ? and (bracket_position = ? or bracket_position = ?)", @wrestler.next_match_position_number.ceil,@wrestler.weight_id, @wrestler.last_match.round, "Conso", "Conso Quarter").sort_by{|m| m.round}.first new_match = Match.where("bracket_position_number = ? and weight_id = ? and round > ? and (bracket_position = ? or bracket_position = ?)", @next_match_position_number.ceil,@wrestler.weight_id, @last_match.round, "Conso", "Conso Quarter").sort_by{|m| m.round}.first
update_new_match(new_match, get_wrestler_number) update_new_match(new_match, get_wrestler_number)
end end
end end
end end
def update_new_match(match, wrestler_number) def update_new_match(match, wrestler_number)
if wrestler_number == 2 or match.loser1_name != nil puts "!!!!!!!!!!!!!!!!!!!!!!"
puts "#{match.bout_number} is getting #{@wrestler.name} as wrestler #{wrestler_number}"
if wrestler_number == 2 or match.loser1_name.include? "Loser of"
match.w2 = @wrestler.id match.w2 = @wrestler.id
match.save match.save
elsif elsif wrestler_number == 1
match.w1 = @wrestler.id match.w1 = @wrestler.id
match.save match.save
end end
@@ -83,15 +87,15 @@ class DoubleEliminationAdvance
end end
def get_wrestler_number def get_wrestler_number
if @wrestler.next_match_position_number != @wrestler.next_match_position_number.ceil if @next_match_position_number != @next_match_position_number.ceil
return 1 return 1
elsif @wrestler.next_match_position_number == @wrestler.next_match_position_number.ceil elsif @next_match_position_number == @next_match_position_number.ceil
return 2 return 2
end end
end end
def loser_advance def loser_advance
bout = @wrestler.last_match.bout_number bout = @last_match.bout_number
next_match = Match.where("(loser1_name = ? OR loser2_name = ?) AND weight_id = ?","Loser of #{bout}","Loser of #{bout}",@wrestler.weight_id) next_match = Match.where("(loser1_name = ? OR loser2_name = ?) AND weight_id = ?","Loser of #{bout}","Loser of #{bout}",@wrestler.weight_id)
if next_match.size > 0 if next_match.size > 0
next_match = next_match.first next_match = next_match.first
@@ -108,7 +112,7 @@ class DoubleEliminationAdvance
def advance_double_byes def advance_double_byes
weight = @wrestler.weight weight = @wrestler.weight
weight.matches.select{|m| m.loser1_name == "BYE" and m.loser2_name == "BYE"}.each do |match| weight.matches.select{|m| m.loser1_name == "BYE" and m.loser2_name == "BYE" and m.finished != 1}.each do |match|
match.finished = 1 match.finished = 1
match.win_type = "BYE" match.win_type = "BYE"
next_match_position_number = (match.bracket_position_number / 2.0).ceil next_match_position_number = (match.bracket_position_number / 2.0).ceil