diff --git a/app/controllers/homework_common_controller.rb b/app/controllers/homework_common_controller.rb index bf402d4a2..331837329 100644 --- a/app/controllers/homework_common_controller.rb +++ b/app/controllers/homework_common_controller.rb @@ -30,13 +30,13 @@ class HomeworkCommonController < ApplicationController if @order.blank? @homework_commons = @course.homework_commons.where("name like '%#{@search}%'").order("created_at desc") else - @homework_commons = HomeworkCommon.find_by_sql("SELECT * FROM `homework_commons` hc, `homework_detail_manuals` hdm where hdm.homework_common_id = hc.id and hc.course_id=#{@course.id} and hc.name like '%#{@search}%' and hdm.comment_status='#{@order}';") + @homework_commons = @course.homework_commons.includes(:homework_detail_manual).where("name like '%#{@search}%' and homework_detail_manuals.comment_status = #{@order}").order("homework_commons.created_at desc") end else if @order.blank? @homework_commons = @course.homework_commons.where("name like '%#{@search}%' and publish_time <= '#{Time.now}'").order("created_at desc") else - @homework_commons = HomeworkCommon.find_by_sql("SELECT * FROM `homework_commons` hc, `homework_detail_manuals` hdm where hdm.homework_common_id = hc.id and hc.course_id=#{@course.id} and hc.name like '%#{@search}%' and hc.publish_time <= #{Time.now} and hdm.comment_status='#{@order}';") + @homework_commons = @course.homework_commons.includes(:homework_detail_manual).where("name like '%#{@search}%' and publish_time <= '#{Time.now}' and homework_detail_manuals.comment_status = #{@order}").order("homework_commons.created_at desc") end end @is_student = User.current.logged? && (User.current.admin? || (User.current.member_of_course?(@course) && !@is_teacher)) @@ -221,6 +221,7 @@ class HomeworkCommonController < ApplicationController end def anon_setting + anonymous_comment = @homework.anonymous_comment if params[:homework_anonymous_comment] @homework.anonymous_comment = 0 @homework_detail_manual.evaluation_start = params[:homework_evaluation_start] @@ -234,6 +235,11 @@ class HomeworkCommonController < ApplicationController @homework_detail_manual.evaluation_num = 0 @homework_detail_manual.absence_penalty = 0 end + if anonymous_comment != @homework.anonymous_comment + @homework_detail_manual.te_proportion = 1 + @homework_detail_manual.ta_proportion = 0 + @homework_detail_program.te_proportion = 0 if @homework_detail_program + end if params[:homework_anonymous_appeal] @homework.anonymous_appeal = 1 @homework_detail_manual.appeal_time = params[:homework_appeal_time] diff --git a/app/controllers/student_work_controller.rb b/app/controllers/student_work_controller.rb index c036d6fcc..1f1e55445 100644 --- a/app/controllers/student_work_controller.rb +++ b/app/controllers/student_work_controller.rb @@ -1829,129 +1829,4 @@ class StudentWorkController < ApplicationController end JSON.parse(res.body) end - - #成绩计算 - def set_final_score homework,student_work - if homework && homework.homework_detail_manual - if homework.homework_type != 2 #非编程作业 - if homework.teacher_priority == 1 #教师优先 - if student_work.teacher_score - student_work.final_score = student_work.teacher_score - student_work.work_score = student_work.teacher_score - student_work.absence_penalty - student_work.late_penalty - 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 = homework.homework_detail_manual.ta_proportion - 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 - 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 - 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 = homework.homework_detail_manual.ta_proportion - 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 - 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 - elsif homework.homework_type == 2 && homework.homework_detail_programing #编程作业-----设定:系统评分必定不为空 - if homework.teacher_priority == 1 #教师优先 - if student_work.teacher_score - student_work.final_score = student_work.teacher_score - student_work.work_score = student_work.teacher_score - student_work.absence_penalty - student_work.late_penalty - student_work.appeal_penalty - 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 = homework.homework_detail_programing.ta_proportion + homework.homework_detail_manual.ta_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 = homework.homework_detail_programing.ta_proportion + (1.0 - homework.homework_detail_manual.ta_proportion - homework.homework_detail_programing.ta_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 - final_sy_score = BigDecimal.new("#{student_work.system_score || 0}") * BigDecimal.new("#{homework.homework_detail_programing.ta_proportion}") - final_ts_score = BigDecimal.new("#{student_work.teaching_asistant_score}") * BigDecimal.new("#{homework.homework_detail_manual.ta_proportion}") - final_st_score = BigDecimal.new("#{student_work.student_score}") * (BigDecimal.new('1.0') - BigDecimal.new("#{homework.homework_detail_programing.ta_proportion}") - BigDecimal.new("#{homework.homework_detail_manual.ta_proportion}")) - final_score = final_sy_score + final_ts_score + final_st_score - student_work.final_score = format("%.2f",final_score.to_f) - 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 - 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 = homework.homework_detail_programing.ta_proportion + homework.homework_detail_manual.ta_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 = homework.homework_detail_programing.ta_proportion + (1.0 - homework.homework_detail_manual.ta_proportion - homework.homework_detail_programing.ta_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 - final_sy_score = BigDecimal.new("#{student_work.system_score || 0}") * BigDecimal.new("#{homework.homework_detail_programing.ta_proportion}") - final_ts_score = BigDecimal.new("#{student_work.teaching_asistant_score}") * BigDecimal.new("#{homework.homework_detail_manual.ta_proportion}") - final_st_score = BigDecimal.new("#{student_work.student_score}") * (BigDecimal.new('1.0') - BigDecimal.new("#{homework.homework_detail_programing.ta_proportion}") - BigDecimal.new("#{homework.homework_detail_manual.ta_proportion}")) - final_score = final_sy_score + final_ts_score + final_st_score - student_work.final_score = format("%.2f",final_score.to_f) - 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 end diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index 8353edd29..550a19834 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -328,58 +328,60 @@ module ApplicationHelper status = "" time = "" ho_detail_manual = homework_common.homework_detail_manual - case ho_detail_manual.comment_status - when 0 - status = "挂起" - if homework_common.publish_time && homework_common.publish_time > Time.now - time = time_from_future(homework_common.publish_time).to_s + "后发布" - end - when 1 - status = "提交中" - if homework_common.end_time && homework_common.end_time > Time.now - time = time_from_future(homework_common.end_time).to_s + "后结束" - elsif !homework_common.allow_late && homework_common.anonymous_comment == 0 - if ho_detail_manual.evaluation_start && ho_detail_manual.evaluation_start >= Time.now - status = "匿评中" - time = time_from_future(ho_detail_manual.evaluation_start).to_s + "后开始" + if ho_detail_manual + case ho_detail_manual.comment_status + when 0 + status = "挂起" + if homework_common.publish_time && homework_common.publish_time > Time.now + time = time_from_future(homework_common.publish_time).to_s + "后发布" end - elsif !homework_common.allow_late && homework_common.anonymous_comment == 1 - if homework_common.archive_time && homework_common.archive_time >= Time.now - status = "评阅中" + when 1 + status = "提交中" + if homework_common.end_time && homework_common.end_time > Time.now + time = time_from_future(homework_common.end_time).to_s + "后结束" + elsif !homework_common.allow_late && homework_common.anonymous_comment == 0 + if ho_detail_manual.evaluation_start && ho_detail_manual.evaluation_start >= Time.now + status = "匿评中" + time = time_from_future(ho_detail_manual.evaluation_start).to_s + "后开始" + end + elsif !homework_common.allow_late && homework_common.anonymous_comment == 1 + if homework_common.archive_time && homework_common.archive_time >= Time.now + status = "评阅中" + time = time_from_future(homework_common.archive_time).to_s + "后结束" + end + end + when 2 + status = "补交中" + if homework_common.late_time && homework_common.late_time >= Time.now + time = time_from_future(homework_common.late_time).to_s + "后结束" + elsif homework_common.anonymous_comment == 0 + if ho_detail_manual.evaluation_start && ho_detail_manual.evaluation_start >= Time.now + status = "匿评中" + time = time_from_future(ho_detail_manual.evaluation_start).to_s + "后开始" + end + end + when 3 + status = "匿评中" + if ho_detail_manual.evaluation_end && ho_detail_manual.evaluation_end > Time.now + time = time_from_future(ho_detail_manual.evaluation_end).to_s + "后结束" + elsif homework_common.anonymous_appeal && ho_detail_manual.appeal_time && ho_detail_manual.appeal_time >= Time.now + status = "申诉" + time = time_from_future(ho_detail_manual.appeal_time).to_s + "后开始" + end + when 4 + status = "申诉中" + if ho_detail_manual.appeal_time && ho_detail_manual.appeal_time > Time.now + time = time_from_future(ho_detail_manual.appeal_time).to_s + "后结束" + end + when 5 + status = "评阅中" + if homework_common.archive_time && homework_common.archive_time > Time.now time = time_from_future(homework_common.archive_time).to_s + "后结束" end - end - when 2 - status = "补交中" - if homework_common.late_time && homework_common.late_time >= Time.now - time = time_from_future(homework_common.late_time).to_s + "后结束" - elsif homework_common.anonymous_comment == 0 - if ho_detail_manual.evaluation_start && ho_detail_manual.evaluation_start >= Time.now - status = "匿评中" - time = time_from_future(ho_detail_manual.evaluation_start).to_s + "后开始" - end - end - when 3 - status = "匿评中" - if ho_detail_manual.evaluation_end && ho_detail_manual.evaluation_end > Time.now - time = time_from_future(ho_detail_manual.evaluation_end).to_s + "后结束" - elsif homework_common.anonymous_appeal && ho_detail_manual.appeal_time && ho_detail_manual.appeal_time >= Time.now - status = "申诉" - time = time_from_future(ho_detail_manual.appeal_time).to_s + "后开始" - end - when 4 - status = "申诉中" - if ho_detail_manual.appeal_time && ho_detail_manual.appeal_time > Time.now - time = time_from_future(ho_detail_manual.appeal_time).to_s + "后结束" - end - when 5 - status = "评阅中" - if homework_common.archive_time && homework_common.archive_time > Time.now - time = time_from_future(homework_common.archive_time).to_s + "后结束" - end - when 6 - status = "已结束" - time = format_time homework_common.archive_time + when 6 + status = "已结束" + time = format_time homework_common.archive_time + end end result[:status] = status result[:time] = time @@ -4718,3 +4720,128 @@ def sy_homeworks syllabus homeworks end +#成绩计算 +def set_final_score homework,student_work + if homework && homework.homework_detail_manual + if homework.homework_type != 2 #非编程作业 + if homework.teacher_priority == 1 #教师优先 + if student_work.teacher_score + student_work.final_score = student_work.teacher_score + student_work.work_score = student_work.teacher_score - student_work.absence_penalty - student_work.late_penalty + 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 = homework.homework_detail_manual.ta_proportion + 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 + 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 + 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 = homework.homework_detail_manual.ta_proportion + 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 + 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 + elsif homework.homework_type == 2 && homework.homework_detail_programing #编程作业-----设定:系统评分必定不为空 + if homework.teacher_priority == 1 #教师优先 + if student_work.teacher_score + student_work.final_score = student_work.teacher_score + student_work.work_score = student_work.teacher_score - student_work.absence_penalty - student_work.late_penalty - student_work.appeal_penalty + 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 = homework.homework_detail_programing.ta_proportion + homework.homework_detail_manual.ta_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 = homework.homework_detail_programing.ta_proportion + (1.0 - homework.homework_detail_manual.ta_proportion - homework.homework_detail_programing.ta_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 + final_sy_score = BigDecimal.new("#{student_work.system_score || 0}") * BigDecimal.new("#{homework.homework_detail_programing.ta_proportion}") + final_ts_score = BigDecimal.new("#{student_work.teaching_asistant_score}") * BigDecimal.new("#{homework.homework_detail_manual.ta_proportion}") + final_st_score = BigDecimal.new("#{student_work.student_score}") * (BigDecimal.new('1.0') - BigDecimal.new("#{homework.homework_detail_programing.ta_proportion}") - BigDecimal.new("#{homework.homework_detail_manual.ta_proportion}")) + final_score = final_sy_score + final_ts_score + final_st_score + student_work.final_score = format("%.2f",final_score.to_f) + 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 + 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 = homework.homework_detail_programing.ta_proportion + homework.homework_detail_manual.ta_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 = homework.homework_detail_programing.ta_proportion + (1.0 - homework.homework_detail_manual.ta_proportion - homework.homework_detail_programing.ta_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 + final_sy_score = BigDecimal.new("#{student_work.system_score || 0}") * BigDecimal.new("#{homework.homework_detail_programing.ta_proportion}") + final_ts_score = BigDecimal.new("#{student_work.teaching_asistant_score}") * BigDecimal.new("#{homework.homework_detail_manual.ta_proportion}") + final_st_score = BigDecimal.new("#{student_work.student_score}") * (BigDecimal.new('1.0') - BigDecimal.new("#{homework.homework_detail_programing.ta_proportion}") - BigDecimal.new("#{homework.homework_detail_manual.ta_proportion}")) + final_score = final_sy_score + final_ts_score + final_st_score + student_work.final_score = format("%.2f",final_score.to_f) + 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/views/account/login.html.erb b/app/views/account/login.html.erb index 113478c16..987b8f32a 100644 --- a/app/views/account/login.html.erb +++ b/app/views/account/login.html.erb @@ -50,7 +50,8 @@
<%= flash.empty? || flash[:error].nil? ? "" : flash[:error].html_safe %>