class UpdateOneStudentScore < ActiveRecord::Migration
  def up
    begin
      student_work_score = StudentWorksScore.where("user_id = 11688 AND student_work_id = 34414").first
      student_work_score.score = 100
      student_work_score.save
      student_works = StudentWork.where("user_id = 6456")
      student_works.each do |work|
        unless work.student_works_scores.empty?
          if work.student_works_scores.where(:reviewer_role => 2).empty?
            work.teaching_asistant_score = nil
          else
            work.teaching_asistant_score = work.student_works_scores.where(:reviewer_role => 2).average(:score).try(:round, 2).to_f
          end
          if work.student_works_scores.where(:reviewer_role => 3).empty?
            work.student_score = nil
          else
            work.student_score = work.student_works_scores.where(:reviewer_role => 3).average(:score).try(:round, 2).to_f
          end
        end
        if work.teaching_asistant_score.nil?
          work.final_score = work.student_score
        elsif work.student_score.nil?
          work.final_score = work.teaching_asistant_score
        else
          homework = HomeworkCommon.find work.homework_common_id
          ta_proportion = homework.homework_detail_manual.ta_proportion
          final_ta_score = BigDecimal.new("#{work.teaching_asistant_score}") * BigDecimal.new("#{ta_proportion}")
          final_s_score = BigDecimal.new("#{work.student_score}") * (BigDecimal.new('1.0')  - BigDecimal.new("#{ta_proportion}"))
          final_score = final_ta_score + final_s_score
          work.final_score = format("%.2f",final_score.to_f)
        end
        work.save
      end
    rescue => e
      logger.error "[Errno::ENOENT] ===> #{e}"
    end
  end

  def down
  end
end
