1
0
mirror of https://github.com/jcwimer/wrestlingApp synced 2026-03-25 01:14:43 +00:00
Files
wrestlingdev.com/app/models/wrestler.rb
2017-01-19 00:41:34 -05:00

215 lines
4.5 KiB
Ruby

class Wrestler < ActiveRecord::Base
belongs_to :school, touch: true
belongs_to :weight, touch: true
has_one :tournament, through: :weight
has_many :matches, through: :weight
has_many :deductedPoints, class_name: "Teampointadjust"
attr_accessor :poolNumber, :poolAdvancePoints, :originalId, :swapId
validates :name, :weight_id, :school_id, presence: true
before_destroy do
# self.tournament.destroyAllMatches
end
before_create do
# self.tournament.destroyAllMatches
end
def lastFinishedMatch
allMatches.select{|m| m.finished == 1}.sort_by{|m| m.bout_number}.last
end
def totalTeamPoints
CalculateWrestlerTeamScore.new(self).totalScore
end
def teamPointsEarned
CalculateWrestlerTeamScore.new(self).earnedPoints
end
def placementPoints
CalculateWrestlerTeamScore.new(self).placementPoints
end
def totalDeductedPoints
CalculateWrestlerTeamScore.new(self).deductedPoints
end
def nextMatch
unfinishedMatches.first
end
def nextMatchPositionNumber
pos = lastMatch.bracket_position_number
return (pos/2.0)
end
def lastMatch
finishedMatches.sort_by{|m| m.round}.reverse.first
end
def winnerOfLastMatch?
if lastMatch.winner_id == self.id
return true
else
return false
end
end
def nextMatchBoutNumber
if nextMatch
nextMatch.bout_number
else
""
end
end
def nextMatchMatName
if nextMatch
nextMatch.mat_assigned
else
""
end
end
def unfinishedMatches
allMatches.select{|m| m.finished != 1}.sort_by{|m| m.bout_number}
end
def resultByBout(bout)
bout_match = allMatches.select{|m| m.bout_number == bout and m.finished == 1}
if bout_match.size == 0
return ""
end
if bout_match.first.winner_id == self.id
return "W #{bout_match.first.bracketScore}"
end
if bout_match.first.winner_id != self.id
return "L #{bout_match.first.bracketScore}"
end
end
def matchAgainst(opponent)
allMatches.select{|m| m.w1 == opponent.id or m.w2 == opponent.id}
end
def isWrestlingThisRound(matchRound)
if allMatches.blank?
return false
else
return true
end
end
def generatePoolNumber
self.weight.returnPoolNumber(self)
end
def boutByRound(round)
round_match = allMatches.select{|m| m.round == round}.first
if round_match.blank?
return "BYE"
else
return round_match.bout_number
end
end
def allMatches
return matches.select{|m| m.w1 == self.id or m.w2 == self.id}
end
def poolMatches
pool_matches = allMatches.select{|m| m.bracket_position == "Pool"}
pool_matches.select{|m| m.poolNumber == self.generatePoolNumber}
end
def hasAPoolBye
if weight.poolRounds(matches) > poolMatches.size
return true
else
return false
end
end
def championshipAdvancementWins
matchesWon.select{|m| m.bracket_position == "Quarter" or m.bracket_position == "Semis"}
end
def consoAdvancementWins
matchesWon.select{|m| m.bracket_position == "Conso Semis"}
end
def finishedMatches
allMatches.select{|m| m.finished == 1}
end
def finishedBracketMatches
finishedMatches.select{|m| m.bracket_position != "Pool"}
end
def finishedPoolMatches
finishedMatches.select{|m| m.bracket_position == "Pool"}
end
def matchesWon
allMatches.select{|m| m.winner_id == self.id}
end
def poolWins
matchesWon.select{|m| m.bracket_position == "Pool"}
end
def pinWins
matchesWon.select{|m| m.win_type == "Pin" || m.win_type == "Forfeit" || m.win_type == "Injury Default" || m.win_type == "Default" || m.win_type == "DQ"}
end
def techWins
matchesWon.select{|m| m.win_type == "Tech Fall" }
end
def majorWins
matchesWon.select{|m| m.win_type == "Major" }
end
def decisionWins
matchesWon.select{|m| m.win_type == "Decision" }
end
def decisionPointsScored
pointsScored = 0
decisionWins.each do |m|
scoreOfMatch = m.score.delete(" ")
scoreOne = scoreOfMatch.partition('-').first.to_i
scoreTwo = scoreOfMatch.partition('-').last.to_i
if scoreOne > scoreTwo
pointsScored = pointsScored + scoreOne
elsif scoreTwo > scoreOne
pointsScored = pointsScored + scoreTwo
end
end
pointsScored
end
def fastestPin
pinWins.sort_by{|m| m.pinTime}.first
end
def seasonWinPercentage
win = self.season_win.to_f
loss = self.season_loss.to_f
if win > 0 and loss != nil
matchTotal = win + loss
percentageDec = win / matchTotal
percentage = percentageDec * 100
return percentage.to_i
elsif self.season_win == 0
return 0
elsif self.season_win == nil or self.season_loss == nil
return 0
end
end
end