diff --git a/app/controllers/student_work_controller.rb b/app/controllers/student_work_controller.rb index a3bddd2ac..cbf052009 100644 --- a/app/controllers/student_work_controller.rb +++ b/app/controllers/student_work_controller.rb @@ -1225,19 +1225,36 @@ class StudentWorkController < ApplicationController end end - if (params[:te_proportion] && params[:te_proportion].to_s != homework_detail_manual.te_proportion.to_s) || (params[:ta_proportion] && params[:ta_proportion].to_s != homework_detail_manual.ta_proportion.to_s) || (homework_detail_programing && homework_detail_programing.ta_proportion.to_s != params[:sy_proportion].to_s) - homework_detail_manual.te_proportion = params[:te_proportion] - homework_detail_manual.ta_proportion = params[:ta_proportion] - homework_detail_programing.ta_proportion = params[:sy_proportion] if homework_detail_programing - + if params[:final_mode] && params[:final_mode].to_i != homework_detail_manual.final_mode + homework_detail_manual.final_mode = params[:final_mode].to_i + if params[:final_mode].to_i == 0 + homework_detail_manual.te_proportion = params[:te_proportion] + homework_detail_manual.ta_proportion = params[:ta_proportion] + homework_detail_programing.ta_proportion = params[:sy_proportion] if homework_detail_programing + homework_detail_programing.save if homework_detail_programing + end homework_detail_manual.save if homework_detail_manual - homework_detail_programing.save if homework_detail_programing @homework.save @homework = HomeworkCommon.find @homework.id @homework.student_works.each do |student_work| set_final_score @homework,student_work student_work.save end + elsif params[:final_mode] && homework_detail_manual.final_mode == 0 + if (params[:te_proportion] && params[:te_proportion].to_s != homework_detail_manual.te_proportion.to_s) || (params[:ta_proportion] && params[:ta_proportion].to_s != homework_detail_manual.ta_proportion.to_s) || (homework_detail_programing && homework_detail_programing.ta_proportion.to_s != params[:sy_proportion].to_s) + homework_detail_manual.te_proportion = params[:te_proportion] + homework_detail_manual.ta_proportion = params[:ta_proportion] + homework_detail_programing.ta_proportion = params[:sy_proportion] if homework_detail_programing + + homework_detail_manual.save if homework_detail_manual + homework_detail_programing.save if homework_detail_programing + @homework.save + @homework = HomeworkCommon.find @homework.id + @homework.student_works.each do |student_work| + set_final_score @homework,student_work + student_work.save + end + end end @homework.save @@ -1815,120 +1832,148 @@ class StudentWorkController < ApplicationController #成绩计算 def set_final_score homework,student_work if homework && homework.homework_detail_manual - tea_ass_proportion = homework.homework_detail_manual.ta_proportion - tea_proportion = homework.homework_detail_manual.te_proportion - if homework.homework_type != 2 #非编程作业 - if student_work.teacher_score - if student_work.teaching_asistant_score.nil? - if student_work.student_score.nil? - student_work.final_score = student_work.teacher_score + if !homework.homework_detail_manual.final_mode + tea_ass_proportion = homework.homework_detail_manual.ta_proportion + tea_proportion = homework.homework_detail_manual.te_proportion + if homework.homework_type != 2 #非编程作业 + if student_work.teacher_score + if student_work.teaching_asistant_score.nil? + if student_work.student_score.nil? + student_work.final_score = student_work.teacher_score + else + te_proportion = tea_proportion + tea_ass_proportion / 2 + final_te_score = BigDecimal.new("#{student_work.teacher_score}") * BigDecimal.new("#{te_proportion}") + final_s_score = BigDecimal.new("#{student_work.student_score}") * (BigDecimal.new('1.0') - BigDecimal.new("#{te_proportion}")) + final_score = final_te_score + final_s_score + student_work.final_score = format("%.2f",final_score.to_f) + end else - te_proportion = tea_proportion + tea_ass_proportion / 2 - final_te_score = BigDecimal.new("#{student_work.teacher_score}") * BigDecimal.new("#{te_proportion}") - final_s_score = BigDecimal.new("#{student_work.student_score}") * (BigDecimal.new('1.0') - BigDecimal.new("#{te_proportion}")) - final_score = final_te_score + final_s_score - student_work.final_score = format("%.2f",final_score.to_f) + if student_work.student_score.nil? + te_proportion = tea_proportion + (1.0 - tea_proportion - tea_ass_proportion) / 2 + final_te_score = BigDecimal.new("#{student_work.teacher_score}") * BigDecimal.new("#{te_proportion}") + final_ta_score = BigDecimal.new("#{student_work.teaching_asistant_score}") * (BigDecimal.new('1.0') - BigDecimal.new("#{te_proportion}")) + final_score = final_te_score + final_ta_score + student_work.final_score = format("%.2f",final_score.to_f) + else + final_te_score = BigDecimal.new("#{student_work.teacher_score}") * BigDecimal.new("#{tea_proportion}") + final_ta_score = BigDecimal.new("#{student_work.teaching_asistant_score}") * BigDecimal.new("#{tea_ass_proportion}") + final_s_score = BigDecimal.new("#{student_work.student_score}") * (BigDecimal.new('1.0') - BigDecimal.new("#{tea_proportion}") - BigDecimal.new("#{tea_ass_proportion}")) + final_score = final_te_score + final_ta_score + final_s_score + student_work.final_score = format("%.2f",final_score.to_f) + end end else - if student_work.student_score.nil? - te_proportion = tea_proportion + (1.0 - tea_proportion - tea_ass_proportion) / 2 - final_te_score = BigDecimal.new("#{student_work.teacher_score}") * BigDecimal.new("#{te_proportion}") - final_ta_score = BigDecimal.new("#{student_work.teaching_asistant_score}") * (BigDecimal.new('1.0') - BigDecimal.new("#{te_proportion}")) - final_score = final_te_score + final_ta_score - student_work.final_score = format("%.2f",final_score.to_f) + if student_work.teaching_asistant_score.nil? + student_work.final_score = student_work.student_score + elsif student_work.student_score.nil? + student_work.final_score = student_work.teaching_asistant_score else - final_te_score = BigDecimal.new("#{student_work.teacher_score}") * BigDecimal.new("#{tea_proportion}") - final_ta_score = BigDecimal.new("#{student_work.teaching_asistant_score}") * BigDecimal.new("#{tea_ass_proportion}") - final_s_score = BigDecimal.new("#{student_work.student_score}") * (BigDecimal.new('1.0') - BigDecimal.new("#{tea_proportion}") - BigDecimal.new("#{tea_ass_proportion}")) - final_score = final_te_score + final_ta_score + final_s_score + ta_proportion = tea_ass_proportion + tea_proportion / 2 + final_ta_score = BigDecimal.new("#{student_work.teaching_asistant_score}") * BigDecimal.new("#{ta_proportion}") + final_s_score = BigDecimal.new("#{student_work.student_score}") * (BigDecimal.new('1.0') - BigDecimal.new("#{ta_proportion}")) + final_score = final_ta_score + final_s_score student_work.final_score = format("%.2f",final_score.to_f) end end - else - if student_work.teaching_asistant_score.nil? - student_work.final_score = student_work.student_score - elsif student_work.student_score.nil? - student_work.final_score = student_work.teaching_asistant_score - else - ta_proportion = tea_ass_proportion + tea_proportion / 2 - final_ta_score = BigDecimal.new("#{student_work.teaching_asistant_score}") * BigDecimal.new("#{ta_proportion}") - final_s_score = BigDecimal.new("#{student_work.student_score}") * (BigDecimal.new('1.0') - BigDecimal.new("#{ta_proportion}")) - final_score = final_ta_score + final_s_score - student_work.final_score = format("%.2f",final_score.to_f) - end - end - elsif homework.homework_type == 2 && homework.homework_detail_programing #编程作业-----设定:系统评分必定不为空 - #if homework.teacher_priority == 1 #教师优先 - sy_proportion = homework.homework_detail_programing.ta_proportion - if student_work.teacher_score - if student_work.teaching_asistant_score.nil? #教辅未评分 - if student_work.student_score.nil? - ta_proportion = tea_proportion + (1 - tea_proportion - sy_proportion) / 2 - final_te_score = BigDecimal.new("#{student_work.teacher_score}") * BigDecimal.new("#{ta_proportion}") - final_sy_score = BigDecimal.new("#{student_work.system_score || 0}") * (BigDecimal.new('1.0') - BigDecimal.new("#{ta_proportion}")) - final_score = final_sy_score + final_te_score - student_work.final_score = format("%.2f",final_score.to_f) - else - rest_proportion = tea_ass_proportion / 3 + elsif homework.homework_type == 2 && homework.homework_detail_programing #编程作业-----设定:系统评分必定不为空 + #if homework.teacher_priority == 1 #教师优先 + sy_proportion = homework.homework_detail_programing.ta_proportion + if student_work.teacher_score + if student_work.teaching_asistant_score.nil? #教辅未评分 + if student_work.student_score.nil? + ta_proportion = tea_proportion + (1 - tea_proportion - sy_proportion) / 2 + final_te_score = BigDecimal.new("#{student_work.teacher_score}") * BigDecimal.new("#{ta_proportion}") + final_sy_score = BigDecimal.new("#{student_work.system_score || 0}") * (BigDecimal.new('1.0') - BigDecimal.new("#{ta_proportion}")) + final_score = final_sy_score + final_te_score + student_work.final_score = format("%.2f",final_score.to_f) + else + rest_proportion = tea_ass_proportion / 3 + final_sy_score = BigDecimal.new("#{student_work.system_score || 0}") * BigDecimal.new("#{sy_proportion + rest_proportion}") + final_te_score = BigDecimal.new("#{student_work.teacher_score}") * BigDecimal.new("#{tea_proportion + rest_proportion}") + final_st_score = BigDecimal.new("#{student_work.student_score}") * (BigDecimal.new('1.0') - BigDecimal.new("#{sy_proportion + rest_proportion}") - BigDecimal.new("#{tea_proportion + rest_proportion}")) + final_score = final_sy_score + final_te_score + final_st_score + student_work.final_score = format("%.2f",final_score.to_f) + end + elsif student_work.student_score.nil? #学生未评分 + rest_proportion = (1 - tea_proportion - sy_proportion - tea_ass_proportion) / 3 final_sy_score = BigDecimal.new("#{student_work.system_score || 0}") * BigDecimal.new("#{sy_proportion + rest_proportion}") final_te_score = BigDecimal.new("#{student_work.teacher_score}") * BigDecimal.new("#{tea_proportion + rest_proportion}") - final_st_score = BigDecimal.new("#{student_work.student_score}") * (BigDecimal.new('1.0') - BigDecimal.new("#{sy_proportion + rest_proportion}") - BigDecimal.new("#{tea_proportion + rest_proportion}")) - final_score = final_sy_score + final_te_score + final_st_score + final_ta_score = BigDecimal.new("#{student_work.teaching_asistant_score}") * (BigDecimal.new('1.0') - BigDecimal.new("#{sy_proportion + rest_proportion}") - BigDecimal.new("#{tea_proportion + rest_proportion}")) + final_score = final_sy_score + final_te_score + final_ta_score student_work.final_score = format("%.2f",final_score.to_f) - end - elsif student_work.student_score.nil? #学生未评分 - rest_proportion = (1 - tea_proportion - sy_proportion - tea_ass_proportion) / 3 - final_sy_score = BigDecimal.new("#{student_work.system_score || 0}") * BigDecimal.new("#{sy_proportion + rest_proportion}") - final_te_score = BigDecimal.new("#{student_work.teacher_score}") * BigDecimal.new("#{tea_proportion + rest_proportion}") - final_ta_score = BigDecimal.new("#{student_work.teaching_asistant_score}") * (BigDecimal.new('1.0') - BigDecimal.new("#{sy_proportion + rest_proportion}") - BigDecimal.new("#{tea_proportion + rest_proportion}")) - final_score = final_sy_score + final_te_score + final_ta_score - student_work.final_score = format("%.2f",final_score.to_f) - else - final_sy_score = BigDecimal.new("#{student_work.system_score || 0}") * BigDecimal.new("#{sy_proportion}") - final_te_score = BigDecimal.new("#{student_work.teacher_score}") * BigDecimal.new("#{tea_proportion}") - final_ta_score = BigDecimal.new("#{student_work.teaching_asistant_score}") * BigDecimal.new("#{tea_ass_proportion}") - final_s_score = BigDecimal.new("#{student_work.student_score}") * (BigDecimal.new('1.0') - BigDecimal.new("#{sy_proportion}") - BigDecimal.new("#{tea_proportion}") - BigDecimal.new("#{tea_ass_proportion}")) - final_score = final_sy_score + final_ta_score + final_te_score + final_st_score - student_work.final_score = format("%.2f",final_score.to_f) - end - else - if student_work.teaching_asistant_score.nil? #教辅未评分 - if student_work.student_score.nil? - student_work.final_score = student_work.system_score else - ta_proportion = sy_proportion + (tea_ass_proportion + tea_proportion) / 2 - final_sy_score = BigDecimal.new("#{student_work.system_score || 0}") * BigDecimal.new("#{ta_proportion}") - final_st_score = BigDecimal.new("#{student_work.student_score}") * (BigDecimal.new('1.0') - BigDecimal.new("#{ta_proportion}")) - final_score = final_sy_score + final_st_score - student_work.final_score = format("%.2f",final_score.to_f) - end - elsif student_work.student_score.nil? #学生未评分 - if student_work.teaching_asistant_score.nil? - student_work.final_score = student_work.system_score - else - ta_proportion = sy_proportion + (1.0 - tea_ass_proportion - sy_proportion) / 2 - final_sy_score = BigDecimal.new("#{student_work.system_score || 0}") * BigDecimal.new("#{ta_proportion}") - final_ts_score = BigDecimal.new("#{student_work.teaching_asistant_score}") * (BigDecimal.new('1.0') - BigDecimal.new("#{ta_proportion}")) - final_score = final_sy_score + final_ts_score + final_sy_score = BigDecimal.new("#{student_work.system_score || 0}") * BigDecimal.new("#{sy_proportion}") + final_te_score = BigDecimal.new("#{student_work.teacher_score}") * BigDecimal.new("#{tea_proportion}") + final_ta_score = BigDecimal.new("#{student_work.teaching_asistant_score}") * BigDecimal.new("#{tea_ass_proportion}") + final_s_score = BigDecimal.new("#{student_work.student_score}") * (BigDecimal.new('1.0') - BigDecimal.new("#{sy_proportion}") - BigDecimal.new("#{tea_proportion}") - BigDecimal.new("#{tea_ass_proportion}")) + final_score = final_sy_score + final_ta_score + final_te_score + final_st_score student_work.final_score = format("%.2f",final_score.to_f) end else - rest_proportion = tea_proportion / 3 - final_sy_score = BigDecimal.new("#{student_work.system_score || 0}") * BigDecimal.new("#{sy_proportion + rest_proportion}") - final_ts_score = BigDecimal.new("#{student_work.teaching_asistant_score}") * BigDecimal.new("#{tea_ass_proportion + rest_proportion}") - final_st_score = BigDecimal.new("#{student_work.student_score}") * (BigDecimal.new('1.0') - BigDecimal.new("#{sy_proportion + rest_proportion}") - BigDecimal.new("#{tea_ass_proportion + rest_proportion}")) - final_score = final_sy_score + final_ts_score + final_st_score - student_work.final_score = format("%.2f",final_score.to_f) + if student_work.teaching_asistant_score.nil? #教辅未评分 + if student_work.student_score.nil? + student_work.final_score = student_work.system_score + else + ta_proportion = sy_proportion + (tea_ass_proportion + tea_proportion) / 2 + final_sy_score = BigDecimal.new("#{student_work.system_score || 0}") * BigDecimal.new("#{ta_proportion}") + final_st_score = BigDecimal.new("#{student_work.student_score}") * (BigDecimal.new('1.0') - BigDecimal.new("#{ta_proportion}")) + final_score = final_sy_score + final_st_score + student_work.final_score = format("%.2f",final_score.to_f) + end + elsif student_work.student_score.nil? #学生未评分 + if student_work.teaching_asistant_score.nil? + student_work.final_score = student_work.system_score + else + ta_proportion = sy_proportion + (1.0 - tea_ass_proportion - sy_proportion) / 2 + final_sy_score = BigDecimal.new("#{student_work.system_score || 0}") * BigDecimal.new("#{ta_proportion}") + final_ts_score = BigDecimal.new("#{student_work.teaching_asistant_score}") * (BigDecimal.new('1.0') - BigDecimal.new("#{ta_proportion}")) + final_score = final_sy_score + final_ts_score + student_work.final_score = format("%.2f",final_score.to_f) + end + else + rest_proportion = tea_proportion / 3 + final_sy_score = BigDecimal.new("#{student_work.system_score || 0}") * BigDecimal.new("#{sy_proportion + rest_proportion}") + final_ts_score = BigDecimal.new("#{student_work.teaching_asistant_score}") * BigDecimal.new("#{tea_ass_proportion + rest_proportion}") + final_st_score = BigDecimal.new("#{student_work.student_score}") * (BigDecimal.new('1.0') - BigDecimal.new("#{sy_proportion + rest_proportion}") - BigDecimal.new("#{tea_ass_proportion + rest_proportion}")) + final_score = final_sy_score + final_ts_score + final_st_score + student_work.final_score = format("%.2f",final_score.to_f) + end end end - end - - if student_work.final_score - score = student_work.final_score - student_work.absence_penalty - student_work.late_penalty - student_work.appeal_penalty - student_work.work_score = format("%.2f",(score < 0 ? 0 : score).to_f) if score else - student_work.work_score = nil + if homework.homework_type != 2 + if student_work.teacher_score + student_work.final_score = student_work.teacher_score + else + if student_work.teaching_asistant_score.nil? + student_work.final_score = student_work.student_score + else + student_work.final_score = student_work.teaching_asistant_score + end + end + elsif homework.homework_type == 2 && homework.homework_detail_programing + if student_work.teacher_score + student_work.final_score = student_work.teacher_score + else + if student_work.teaching_asistant_score + student_work.final_score = student_work.teaching_asistant_score + else + if student_work.system_score + student_work.final_score = student_work.system_score + else + student_work.final_score = student_work.student_score + end + end + end + end + if student_work.final_score + score = student_work.final_score - student_work.absence_penalty - student_work.late_penalty - student_work.appeal_penalty + student_work.work_score = format("%.2f",(score < 0 ? 0 : score).to_f) if score + else + student_work.work_score = nil + end end end end + end diff --git a/app/models/homework_detail_manual.rb b/app/models/homework_detail_manual.rb index 41c44cc40..f08e17358 100644 --- a/app/models/homework_detail_manual.rb +++ b/app/models/homework_detail_manual.rb @@ -1,7 +1,7 @@ #手动评分作业表 #comment_status: 1:未开启匿评,2:开启匿评,3:匿评结束 class HomeworkDetailManual < ActiveRecord::Base - attr_accessible :te_proportion, :ta_proportion, :comment_status, :evaluation_start, :evaluation_end, :evaluation_num, :absence_penalty, :homework_common_id, :no_anon_penalty + attr_accessible :te_proportion, :ta_proportion, :comment_status, :evaluation_start, :evaluation_end, :evaluation_num, :absence_penalty, :homework_common_id, :no_anon_penalty, :ta_mode, :final_mode belongs_to :homework_common end diff --git a/app/models/student_work.rb b/app/models/student_work.rb index 082a164d6..c5c42a474 100644 --- a/app/models/student_work.rb +++ b/app/models/student_work.rb @@ -50,119 +50,153 @@ class StudentWork < ActiveRecord::Base #成绩计算 def set_final_score homework,student_work if homework && homework.homework_detail_manual - tea_ass_proportion = homework.homework_detail_manual.ta_proportion - tea_proportion = homework.homework_detail_manual.te_proportion - if homework.homework_type != 2 #非编程作业 - if student_work.teacher_score - if student_work.teaching_asistant_score.nil? - if student_work.student_score.nil? - student_work.final_score = student_work.teacher_score + if !homework.homework_detail_manual.final_mode + tea_ass_proportion = homework.homework_detail_manual.ta_proportion + tea_proportion = homework.homework_detail_manual.te_proportion + if homework.homework_type != 2 #非编程作业 + if student_work.teacher_score + if student_work.teaching_asistant_score.nil? + if student_work.student_score.nil? + student_work.final_score = student_work.teacher_score + else + te_proportion = tea_proportion + tea_ass_proportion / 2 + final_te_score = BigDecimal.new("#{student_work.teacher_score}") * BigDecimal.new("#{te_proportion}") + final_s_score = BigDecimal.new("#{student_work.student_score}") * (BigDecimal.new('1.0') - BigDecimal.new("#{te_proportion}")) + final_score = final_te_score + final_s_score + student_work.final_score = format("%.2f",final_score.to_f) + end else - te_proportion = tea_proportion + tea_ass_proportion / 2 - final_te_score = BigDecimal.new("#{student_work.teacher_score}") * BigDecimal.new("#{te_proportion}") - final_s_score = BigDecimal.new("#{student_work.student_score}") * (BigDecimal.new('1.0') - BigDecimal.new("#{te_proportion}")) - final_score = final_te_score + final_s_score - student_work.final_score = format("%.2f",final_score.to_f) + if student_work.student_score.nil? + te_proportion = tea_proportion + (1.0 - tea_proportion - tea_ass_proportion) / 2 + final_te_score = BigDecimal.new("#{student_work.teacher_score}") * BigDecimal.new("#{te_proportion}") + final_ta_score = BigDecimal.new("#{student_work.teaching_asistant_score}") * (BigDecimal.new('1.0') - BigDecimal.new("#{te_proportion}")) + final_score = final_te_score + final_ta_score + student_work.final_score = format("%.2f",final_score.to_f) + else + final_te_score = BigDecimal.new("#{student_work.teacher_score}") * BigDecimal.new("#{tea_proportion}") + final_ta_score = BigDecimal.new("#{student_work.teaching_asistant_score}") * BigDecimal.new("#{tea_ass_proportion}") + final_s_score = BigDecimal.new("#{student_work.student_score}") * (BigDecimal.new('1.0') - BigDecimal.new("#{tea_proportion}") - BigDecimal.new("#{tea_ass_proportion}")) + final_score = final_te_score + final_ta_score + final_s_score + student_work.final_score = format("%.2f",final_score.to_f) + end end else - if student_work.student_score.nil? - te_proportion = tea_proportion + (1.0 - tea_proportion - tea_ass_proportion) / 2 - final_te_score = BigDecimal.new("#{student_work.teacher_score}") * BigDecimal.new("#{te_proportion}") - final_ta_score = BigDecimal.new("#{student_work.teaching_asistant_score}") * (BigDecimal.new('1.0') - BigDecimal.new("#{te_proportion}")) - final_score = final_te_score + final_ta_score - student_work.final_score = format("%.2f",final_score.to_f) + if student_work.teaching_asistant_score.nil? + student_work.final_score = student_work.student_score + elsif student_work.student_score.nil? + student_work.final_score = student_work.teaching_asistant_score else - final_te_score = BigDecimal.new("#{student_work.teacher_score}") * BigDecimal.new("#{tea_proportion}") - final_ta_score = BigDecimal.new("#{student_work.teaching_asistant_score}") * BigDecimal.new("#{tea_ass_proportion}") - final_s_score = BigDecimal.new("#{student_work.student_score}") * (BigDecimal.new('1.0') - BigDecimal.new("#{tea_proportion}") - BigDecimal.new("#{tea_ass_proportion}")) - final_score = final_te_score + final_ta_score + final_s_score + ta_proportion = tea_ass_proportion + tea_proportion / 2 + final_ta_score = BigDecimal.new("#{student_work.teaching_asistant_score}") * BigDecimal.new("#{ta_proportion}") + final_s_score = BigDecimal.new("#{student_work.student_score}") * (BigDecimal.new('1.0') - BigDecimal.new("#{ta_proportion}")) + final_score = final_ta_score + final_s_score student_work.final_score = format("%.2f",final_score.to_f) end end - else - if student_work.teaching_asistant_score.nil? - student_work.final_score = student_work.student_score - elsif student_work.student_score.nil? - student_work.final_score = student_work.teaching_asistant_score - else - ta_proportion = tea_ass_proportion + tea_proportion / 2 - final_ta_score = BigDecimal.new("#{student_work.teaching_asistant_score}") * BigDecimal.new("#{ta_proportion}") - final_s_score = BigDecimal.new("#{student_work.student_score}") * (BigDecimal.new('1.0') - BigDecimal.new("#{ta_proportion}")) - final_score = final_ta_score + final_s_score - student_work.final_score = format("%.2f",final_score.to_f) - end - end - elsif homework.homework_type == 2 && homework.homework_detail_programing #编程作业-----设定:系统评分必定不为空 - #if homework.teacher_priority == 1 #教师优先 - sy_proportion = homework.homework_detail_programing.ta_proportion - if student_work.teacher_score - if student_work.teaching_asistant_score.nil? #教辅未评分 - if student_work.student_score.nil? - ta_proportion = tea_proportion + (1 - tea_proportion - sy_proportion) / 2 - final_te_score = BigDecimal.new("#{student_work.teacher_score}") * BigDecimal.new("#{ta_proportion}") - final_sy_score = BigDecimal.new("#{student_work.system_score || 0}") * (BigDecimal.new('1.0') - BigDecimal.new("#{ta_proportion}")) - final_score = final_sy_score + final_te_score - student_work.final_score = format("%.2f",final_score.to_f) - else - rest_proportion = tea_ass_proportion / 3 + elsif homework.homework_type == 2 && homework.homework_detail_programing #编程作业-----设定:系统评分必定不为空 + #if homework.teacher_priority == 1 #教师优先 + sy_proportion = homework.homework_detail_programing.ta_proportion + if student_work.teacher_score + if student_work.teaching_asistant_score.nil? #教辅未评分 + if student_work.student_score.nil? + ta_proportion = tea_proportion + (1 - tea_proportion - sy_proportion) / 2 + final_te_score = BigDecimal.new("#{student_work.teacher_score}") * BigDecimal.new("#{ta_proportion}") + final_sy_score = BigDecimal.new("#{student_work.system_score || 0}") * (BigDecimal.new('1.0') - BigDecimal.new("#{ta_proportion}")) + final_score = final_sy_score + final_te_score + student_work.final_score = format("%.2f",final_score.to_f) + else + rest_proportion = tea_ass_proportion / 3 + final_sy_score = BigDecimal.new("#{student_work.system_score || 0}") * BigDecimal.new("#{sy_proportion + rest_proportion}") + final_te_score = BigDecimal.new("#{student_work.teacher_score}") * BigDecimal.new("#{tea_proportion + rest_proportion}") + final_st_score = BigDecimal.new("#{student_work.student_score}") * (BigDecimal.new('1.0') - BigDecimal.new("#{sy_proportion + rest_proportion}") - BigDecimal.new("#{tea_proportion + rest_proportion}")) + final_score = final_sy_score + final_te_score + final_st_score + student_work.final_score = format("%.2f",final_score.to_f) + end + elsif student_work.student_score.nil? #学生未评分 + rest_proportion = (1 - tea_proportion - sy_proportion - tea_ass_proportion) / 3 final_sy_score = BigDecimal.new("#{student_work.system_score || 0}") * BigDecimal.new("#{sy_proportion + rest_proportion}") final_te_score = BigDecimal.new("#{student_work.teacher_score}") * BigDecimal.new("#{tea_proportion + rest_proportion}") - final_st_score = BigDecimal.new("#{student_work.student_score}") * (BigDecimal.new('1.0') - BigDecimal.new("#{sy_proportion + rest_proportion}") - BigDecimal.new("#{tea_proportion + rest_proportion}")) - final_score = final_sy_score + final_te_score + final_st_score + final_ta_score = BigDecimal.new("#{student_work.teaching_asistant_score}") * (BigDecimal.new('1.0') - BigDecimal.new("#{sy_proportion + rest_proportion}") - BigDecimal.new("#{tea_proportion + rest_proportion}")) + final_score = final_sy_score + final_te_score + final_ta_score student_work.final_score = format("%.2f",final_score.to_f) - end - elsif student_work.student_score.nil? #学生未评分 - rest_proportion = (1 - tea_proportion - sy_proportion - tea_ass_proportion) / 3 - final_sy_score = BigDecimal.new("#{student_work.system_score || 0}") * BigDecimal.new("#{sy_proportion + rest_proportion}") - final_te_score = BigDecimal.new("#{student_work.teacher_score}") * BigDecimal.new("#{tea_proportion + rest_proportion}") - final_ta_score = BigDecimal.new("#{student_work.teaching_asistant_score}") * (BigDecimal.new('1.0') - BigDecimal.new("#{sy_proportion + rest_proportion}") - BigDecimal.new("#{tea_proportion + rest_proportion}")) - final_score = final_sy_score + final_te_score + final_ta_score - student_work.final_score = format("%.2f",final_score.to_f) - else - final_sy_score = BigDecimal.new("#{student_work.system_score || 0}") * BigDecimal.new("#{sy_proportion}") - final_te_score = BigDecimal.new("#{student_work.teacher_score}") * BigDecimal.new("#{tea_proportion}") - final_ta_score = BigDecimal.new("#{student_work.teaching_asistant_score}") * BigDecimal.new("#{tea_ass_proportion}") - final_s_score = BigDecimal.new("#{student_work.student_score}") * (BigDecimal.new('1.0') - BigDecimal.new("#{sy_proportion}") - BigDecimal.new("#{tea_proportion}") - BigDecimal.new("#{tea_ass_proportion}")) - final_score = final_sy_score + final_ta_score + final_te_score + final_st_score - student_work.final_score = format("%.2f",final_score.to_f) - end - else - if student_work.teaching_asistant_score.nil? #教辅未评分 - if student_work.student_score.nil? - student_work.final_score = student_work.system_score else - ta_proportion = sy_proportion + (tea_ass_proportion + tea_proportion) / 2 - final_sy_score = BigDecimal.new("#{student_work.system_score || 0}") * BigDecimal.new("#{ta_proportion}") - final_st_score = BigDecimal.new("#{student_work.student_score}") * (BigDecimal.new('1.0') - BigDecimal.new("#{ta_proportion}")) - final_score = final_sy_score + final_st_score - student_work.final_score = format("%.2f",final_score.to_f) - end - elsif student_work.student_score.nil? #学生未评分 - if student_work.teaching_asistant_score.nil? - student_work.final_score = student_work.system_score - else - ta_proportion = sy_proportion + (1.0 - tea_ass_proportion - sy_proportion) / 2 - final_sy_score = BigDecimal.new("#{student_work.system_score || 0}") * BigDecimal.new("#{ta_proportion}") - final_ts_score = BigDecimal.new("#{student_work.teaching_asistant_score}") * (BigDecimal.new('1.0') - BigDecimal.new("#{ta_proportion}")) - final_score = final_sy_score + final_ts_score + final_sy_score = BigDecimal.new("#{student_work.system_score || 0}") * BigDecimal.new("#{sy_proportion}") + final_te_score = BigDecimal.new("#{student_work.teacher_score}") * BigDecimal.new("#{tea_proportion}") + final_ta_score = BigDecimal.new("#{student_work.teaching_asistant_score}") * BigDecimal.new("#{tea_ass_proportion}") + final_s_score = BigDecimal.new("#{student_work.student_score}") * (BigDecimal.new('1.0') - BigDecimal.new("#{sy_proportion}") - BigDecimal.new("#{tea_proportion}") - BigDecimal.new("#{tea_ass_proportion}")) + final_score = final_sy_score + final_ta_score + final_te_score + final_st_score student_work.final_score = format("%.2f",final_score.to_f) end else - rest_proportion = tea_proportion / 3 - final_sy_score = BigDecimal.new("#{student_work.system_score || 0}") * BigDecimal.new("#{sy_proportion + rest_proportion}") - final_ts_score = BigDecimal.new("#{student_work.teaching_asistant_score}") * BigDecimal.new("#{tea_ass_proportion + rest_proportion}") - final_st_score = BigDecimal.new("#{student_work.student_score}") * (BigDecimal.new('1.0') - BigDecimal.new("#{sy_proportion + rest_proportion}") - BigDecimal.new("#{tea_ass_proportion + rest_proportion}")) - final_score = final_sy_score + final_ts_score + final_st_score - student_work.final_score = format("%.2f",final_score.to_f) + if student_work.teaching_asistant_score.nil? #教辅未评分 + if student_work.student_score.nil? + student_work.final_score = student_work.system_score + else + ta_proportion = sy_proportion + (tea_ass_proportion + tea_proportion) / 2 + final_sy_score = BigDecimal.new("#{student_work.system_score || 0}") * BigDecimal.new("#{ta_proportion}") + final_st_score = BigDecimal.new("#{student_work.student_score}") * (BigDecimal.new('1.0') - BigDecimal.new("#{ta_proportion}")) + final_score = final_sy_score + final_st_score + student_work.final_score = format("%.2f",final_score.to_f) + end + elsif student_work.student_score.nil? #学生未评分 + if student_work.teaching_asistant_score.nil? + student_work.final_score = student_work.system_score + else + ta_proportion = sy_proportion + (1.0 - tea_ass_proportion - sy_proportion) / 2 + final_sy_score = BigDecimal.new("#{student_work.system_score || 0}") * BigDecimal.new("#{ta_proportion}") + final_ts_score = BigDecimal.new("#{student_work.teaching_asistant_score}") * (BigDecimal.new('1.0') - BigDecimal.new("#{ta_proportion}")) + final_score = final_sy_score + final_ts_score + student_work.final_score = format("%.2f",final_score.to_f) + end + else + rest_proportion = tea_proportion / 3 + final_sy_score = BigDecimal.new("#{student_work.system_score || 0}") * BigDecimal.new("#{sy_proportion + rest_proportion}") + final_ts_score = BigDecimal.new("#{student_work.teaching_asistant_score}") * BigDecimal.new("#{tea_ass_proportion + rest_proportion}") + final_st_score = BigDecimal.new("#{student_work.student_score}") * (BigDecimal.new('1.0') - BigDecimal.new("#{sy_proportion + rest_proportion}") - BigDecimal.new("#{tea_ass_proportion + rest_proportion}")) + final_score = final_sy_score + final_ts_score + final_st_score + student_work.final_score = format("%.2f",final_score.to_f) + end end end - end - if student_work.final_score - score = student_work.final_score - student_work.absence_penalty - student_work.late_penalty - student_work.appeal_penalty - student_work.work_score = format("%.2f",(score < 0 ? 0 : score).to_f) if score + if student_work.final_score + score = student_work.final_score - student_work.absence_penalty - student_work.late_penalty - student_work.appeal_penalty + student_work.work_score = format("%.2f",(score < 0 ? 0 : score).to_f) if score + else + student_work.work_score = nil + end else - student_work.work_score = nil + if homework.homework_type != 2 + if student_work.teacher_score + student_work.final_score = student_work.teacher_score + else + if student_work.teaching_asistant_score.nil? + student_work.final_score = student_work.student_score + else + student_work.final_score = student_work.teaching_asistant_score + end + end + elsif homework.homework_type == 2 && homework.homework_detail_programing + if student_work.teacher_score + student_work.final_score = student_work.teacher_score + else + if student_work.teaching_asistant_score + student_work.final_score = student_work.teaching_asistant_score + else + if student_work.system_score + student_work.final_score = student_work.system_score + else + student_work.final_score = student_work.student_score + end + end + end + end + if student_work.final_score + score = student_work.final_score - student_work.absence_penalty - student_work.late_penalty - student_work.appeal_penalty + student_work.work_score = format("%.2f",(score < 0 ? 0 : score).to_f) if score + else + student_work.work_score = nil + end end end end diff --git a/app/views/homework_common/_set_score_rule_non_pro.html.erb b/app/views/homework_common/_set_score_rule_non_pro.html.erb index 8f30629f4..8fd8d7c48 100644 --- a/app/views/homework_common/_set_score_rule_non_pro.html.erb +++ b/app/views/homework_common/_set_score_rule_non_pro.html.erb @@ -101,30 +101,59 @@
-
  • +
  • -
    @@ -148,32 +177,33 @@ var ta_proportion = 100 - parseInt(parseFloat($("#te_proportion").val()) * 100) - parseInt(parseFloat($("#ta_proportion").val()) * 100); $("#student_proportion").val(ta_proportion + "%"); }); - <% if homework.teacher_priority == 1 %> - $("#teacher_score").attr("checked", "checked"); - <% else %> - $("#other_score").attr("checked", "checked"); - <% end %> + <% if homework.homework_detail_manual.ta_mode == 1 %> $("#ta_normal_mode").attr("checked", "checked"); <% else %> $("#ta_re_mode").attr("checked", "checked"); <% end %> - $("#teacher_score").change(function(){ - if($("#teacher_score").attr("checked")){ - $("#late_penalty_num").val("0"); - $("#absence_penalty_num").val("0"); + + <% if homework.homework_detail_manual.final_mode %> + $("#no_final_mode").attr("checked", "checked"); + $("#te_proportion").attr("disabled", "disabled"); + $("#ta_proportion").attr("disabled", "disabled"); + <% else %> + $("#final_mode").attr("checked", "checked"); + <% end %> + $("#final_mode").click(function(){ + if($("#final_mode").attr("checked")){ + $("#te_proportion").removeAttr("disabled"); + $("#ta_proportion").removeAttr("disabled"); } }); - $("#other_score").change(function(){ - if($("#other_score").attr("checked")){ - $("#late_penalty_num").val("10"); - <% if homework.homework_detail_manual && homework.homework_detail_manual.evaluation_num == -1 %> - $("#absence_penalty_num").val("0"); - <% else %> - $("#absence_penalty_num").val("5"); - <% end %> + $("#no_final_mode").click(function(){ + if($("#no_final_mode").attr("checked")){ + $("#te_proportion").attr("disabled", "disabled"); + $("#ta_proportion").attr("disabled", "disabled"); } }); + <% if homework.anonymous_appeal == 1 %> $("#anonymous_appeal").attr("checked", "checked"); <% else %> diff --git a/app/views/homework_common/_set_score_rule_none_pro_anon.html.erb b/app/views/homework_common/_set_score_rule_none_pro_anon.html.erb index 30986ebf6..cb4f31c97 100644 --- a/app/views/homework_common/_set_score_rule_none_pro_anon.html.erb +++ b/app/views/homework_common/_set_score_rule_none_pro_anon.html.erb @@ -1,4 +1,4 @@ -
    +

    评分设置

    @@ -12,7 +12,7 @@
  • - @@ -161,32 +189,35 @@ var sy_proportion = 100 - parseInt(parseFloat($("#te_proportion").val()) * 100) - parseInt(parseFloat($("#ta_proportion").val()) * 100) - parseInt(parseFloat($("#sy_proportion").val()) * 100); $("#student_proportion").val(sy_proportion + "%"); }); - <% if homework.teacher_priority == 1 %> - $("#teacher_score").attr("checked", "checked"); - <% else %> - $("#other_score").attr("checked", "checked"); - <% end %> + <% if homework.homework_detail_manual.ta_mode == 1 %> $("#ta_normal_mode").attr("checked", "checked"); <% else %> $("#ta_re_mode").attr("checked", "checked"); <% end %> - $("#teacher_score").change(function(){ - if($("#teacher_score").attr("checked")){ - $("#late_penalty_num").val("0"); - $("#absence_penalty_num").val("0"); + <% if homework.homework_detail_manual.final_mode %> + $("#no_final_mode").attr("checked", "checked"); + $("#te_proportion").attr("disabled", "disabled"); + $("#ta_proportion").attr("disabled", "disabled"); + $("#sy_proportion").attr("disabled", "disabled"); + <% else %> + $("#final_mode").attr("checked", "checked"); + <% end %> + $("#final_mode").click(function(){ + if($("#final_mode").attr("checked")){ + $("#te_proportion").removeAttr("disabled"); + $("#ta_proportion").removeAttr("disabled"); + $("#sy_proportion").removeAttr("disabled"); } }); - $("#other_score").change(function(){ - if($("#other_score").attr("checked")){ - $("#late_penalty_num").val("10"); - <% if homework.homework_detail_manual && homework.homework_detail_manual.evaluation_num == -1 %> - $("#absence_penalty_num").val("0"); - <% else %> - $("#absence_penalty_num").val("5"); - <% end %> + $("#no_final_mode").click(function(){ + if($("#no_final_mode").attr("checked")){ + $("#te_proportion").attr("disabled", "disabled"); + $("#ta_proportion").attr("disabled", "disabled"); + $("#sy_proportion").attr("disabled", "disabled"); } }); + <% if homework.anonymous_appeal == 1 %> $("#anonymous_appeal").attr("checked", "checked"); <% else %> diff --git a/app/views/homework_common/_set_score_rule_pro_anon.html.erb b/app/views/homework_common/_set_score_rule_pro_anon.html.erb index 7c3fb093f..51b919822 100644 --- a/app/views/homework_common/_set_score_rule_pro_anon.html.erb +++ b/app/views/homework_common/_set_score_rule_pro_anon.html.erb @@ -1,4 +1,4 @@ -
    +

    评分设置

    @@ -12,7 +12,7 @@ -