class QuizStatus attr_reader :candidate def initialize candidate @candidate = Candidate.find(candidate.to_i) end def started candidate.answers.count > 0 end def on_summary candidate.submitted_answers.count == candidate.questions.count end def completed candidate.completed end def can_submit on_summary && candidate.answered_questions.count == candidate.questions.count end def progress answs = candidate.answered_questions.count.to_f total = candidate.quiz.questions.count.to_f (answs / total * 100).round.to_i end def current_question_id sql = "select q.id question_id from candidates c inner join questions q on q.quiz_id = c.quiz_id left join answers a on a.candidate_id = c.id AND a.question_id = q.id where q.active = true and c.id = #{candidate.to_i} and (a.id is null OR a.submitted is false) order by q.sort limit 1;" result = ActiveRecord::Base.connection.exec_query(sql).to_hash.first result['question_id'] unless result.nil? end end