Advertisement
Guest User

Untitled

a guest
Jun 27th, 2016
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Rails 6.12 KB | None | 0 0
  1. def psych_sheet_event(event)
  2.     preferred_format = event.preferred_formats.first
  3.  
  4.     joinsql = <<-ENDSQL
  5.       join registration_events on registration_events.registration_id = Preregs.id
  6.       join users on users.id = Preregs.user_id
  7.       join Countries on Countries.iso2 = users.country_iso2
  8.       left join RanksSingle on RanksSingle.personId = users.wca_id and RanksSingle.eventId = '#{event.id}'
  9.       left join RanksAverage on RanksAverage.personId = users.wca_id and RanksAverage.eventId = '#{event.id}'
  10.     ENDSQL
  11.  
  12.     selectsql = <<-ENDSQL
  13.       Preregs.id,
  14.       users.name select_name,
  15.       users.wca_id select_wca_id,
  16.       Preregs.accepted_at,
  17.       Countries.name select_country,
  18.       registration_events.event_id,
  19.       RanksAverage.worldRank average_rank,
  20.       ifnull(RanksAverage.best, 0) average_best,
  21.       RanksSingle.worldRank single_rank,
  22.       ifnull(RanksSingle.best, 0) single_best
  23.     ENDSQL
  24.  
  25.     sort_clause = "-#{preferred_format.sort_by}_rank desc, -#{preferred_format.sort_by_second}_rank desc, users.name"
  26.  
  27.     registrations = self.registrations.
  28.                          accepted.
  29.                          joins(joinsql).
  30.                          where("registration_events.event_id=?", event.id).
  31.                          order(sort_clause).
  32.                          select(selectsql)
  33.  
  34.     prev_registration = nil
  35.     registrations.each_with_index do |registration, i|
  36.       registration.tied_previous = false
  37.       if prev_registration
  38.         registration.tied_previous = if preferred_format.sort_by == :single
  39.                                        registration.single_rank == prev_registration.single_rank
  40.                                      else
  41.                                        registration.average_rank == prev_registration.average_rank
  42.                                      end
  43.         registration.pos = registration.tied_previous ? prev_registration.pos : i + 1
  44.       else
  45.         registration.pos = i + 1
  46.       end
  47.       has_competed = if preferred_format.sort_by == :single
  48.                        registration.single_rank
  49.                      else
  50.                        registration.average_rank
  51.                      end
  52.       registration.pos = nil unless has_competed
  53.       prev_registration = registration
  54.     end
  55.     registrations
  56.   end
  57.  
  58.   def psych_sheet_event_v2(event)
  59.     preferred_format = event.preferred_formats.first
  60.  
  61.     joinsql = <<-ENDSQL
  62.       join registration_events on registration_events.registration_id = Preregs.id
  63.       join users on users.id = Preregs.user_id
  64.       join Countries on Countries.iso2 = users.country_iso2
  65.       left join RanksSingle on RanksSingle.personId = users.wca_id and RanksSingle.eventId = '#{event.id}'
  66.       left join RanksAverage on RanksAverage.personId = users.wca_id and RanksAverage.eventId = '#{event.id}'
  67.     ENDSQL
  68.  
  69.     selectsql = <<-ENDSQL
  70.       Preregs.id,
  71.       users.name select_name,
  72.       users.wca_id select_wca_id,
  73.       Preregs.accepted_at,
  74.       Countries.name select_country,
  75.       registration_events.event_id,
  76.       RanksAverage.worldRank average_rank,
  77.       ifnull(RanksAverage.best, 0) average_best,
  78.       RanksSingle.worldRank single_rank,
  79.       ifnull(RanksSingle.best, 0) single_best
  80.     ENDSQL
  81.  
  82.     sort_clause = "-#{preferred_format.sort_by}_rank desc, -#{preferred_format.sort_by_second}_rank desc, users.name"
  83.  
  84.     registrations = self.registrations.
  85.                          accepted.
  86.                          joins(joinsql).
  87.                          where("registration_events.event_id=?", event.id).
  88.                          order(sort_clause).
  89.                          select(selectsql)
  90.  
  91.     prev_registration = nil
  92.     registrations.each_with_index do |registration, i|
  93.       if preferred_format.sort_by == :single
  94.         rank = registration.single_rank
  95.         prev_rank = prev_registration&.single_rank
  96.       else
  97.         rank = registration.average_rank
  98.         prev_rank = prev_registration&.average_rank
  99.       end
  100.      registration.tied_previous = (rank == prev_rank)
  101.      break if !rank # hasn't competed in this event yet and all subsequent registrations too
  102.      registration.pos = registration.tied_previous ? prev_registration.pos : i + 1
  103.      prev_registration = registration
  104.     end
  105.     registrations
  106.   end
  107.  
  108.   def psych_sheet_event_v3(event)
  109.     preferred_format = event.preferred_formats.first
  110.  
  111.     joinsql = <<-ENDSQL
  112.       join registration_events on registration_events.registration_id = Preregs.id
  113.       join users on users.id = Preregs.user_id
  114.       join Countries on Countries.iso2 = users.country_iso2
  115.       left join RanksSingle on RanksSingle.personId = users.wca_id and RanksSingle.eventId = '#{event.id}'
  116.       left join RanksAverage on RanksAverage.personId = users.wca_id and RanksAverage.eventId = '#{event.id}'
  117.     ENDSQL
  118.  
  119.     selectsql = <<-ENDSQL
  120.       Preregs.id,
  121.       users.name select_name,
  122.       users.wca_id select_wca_id,
  123.       Preregs.accepted_at,
  124.       Countries.name select_country,
  125.       registration_events.event_id,
  126.       RanksAverage.worldRank average_rank,
  127.       ifnull(RanksAverage.best, 0) average_best,
  128.       RanksSingle.worldRank single_rank,
  129.       ifnull(RanksSingle.best, 0) single_best
  130.     ENDSQL
  131.  
  132.     sort_clause = "-#{preferred_format.sort_by}_rank desc, -#{preferred_format.sort_by_second}_rank desc, users.name"
  133.  
  134.     registrations = self.registrations.
  135.                          accepted.
  136.                          joins(joinsql).
  137.                          where("registration_events.event_id=?", event.id).
  138.                          order(sort_clause).
  139.                          select(selectsql)
  140.  
  141.     rank = "#{preferred_format.sort_by}_rank" # "single_rank" or "average_rank"
  142.     prev_registration = nil
  143.     registrations.each_with_index do |registration, i|
  144.      registration.tied_previous = (registration.send(rank) == prev_registration&.send(rank))
  145.      break if !registration.send(rank) # hasn't competed in this event yet and all subsequent registrations too
  146.      registration.pos = registration.tied_previous ? prev_registration.pos : i + 1
  147.      prev_registration = registration
  148.     end
  149.     registrations
  150.   end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement