Files
puzzle-scoreboard/app/controllers/concerns/completions_concern.rb
sto 5dd8e97c6b
Some checks failed
CI / scan_ruby (push) Has been cancelled
CI / scan_js (push) Has been cancelled
CI / lint (push) Has been cancelled
CI / test (push) Has been cancelled
Rework of completion forms
2026-08-11 09:26:42 +02:00

68 lines
2.1 KiB
Ruby

module CompletionsConcern
extend ActiveSupport::Concern
def pad(n)
if n > 9
return n.to_s
end
"0" + n.to_s
end
def display_time(time)
if time == nil
return ""
end
h = time / 3600
m = (time % 3600) / 60
s = (time % 3600) % 60
if h > 0
return h.to_s + ":" + pad(m) + ":" + pad(s)
end
m.to_s + ":" + pad(s)
end
def extend_completions!(contestant)
completions = contestant.completions
puzzles = contestant.contest.puzzles
if puzzles.length > 1
current_time_from_start = 0
completions.order(:time_seconds).each do |completion|
completion.update(display_time_from_start: display_time(completion.time_seconds),
display_relative_time: display_time(completion.time_seconds - current_time_from_start))
current_time_from_start = completion.time_seconds
end
contestant.update(display_time: display_time(current_time_from_start), time_seconds: current_time_from_start)
elsif puzzles.length == 1 && completions.length >= 1
if completions[0].remaining_pieces != nil
contestant.update(
display_time: "#{display_time(completions[0].time_seconds)} - #{puzzles[0].pieces - completions[0].remaining_pieces}p",
time_seconds: completions[0].projected_time
)
else
contestant.update(display_time: display_time(completions[0].time_seconds), time_seconds: completions[0].time_seconds)
end
else
contestant.update(display_time: nil, time_seconds: nil)
end
end
def process_completion
if params.key?(:completed_radio) && params[:completed_radio] == "yes"
@completion.completed = true
end
if params.key?(:completed_radio) && params[:completed_radio] == "no"
@completion.completed = false
end
if params.key?(:pieces_radio)
@pieces_radio = params[:pieces_radio]
end
if @pieces_radio == "assembled"
begin
puzzle = Puzzle.find(@completion.puzzle_id)
@completion.remaining_pieces = puzzle.pieces - @completion.remaining_pieces
rescue
end
end
end
end