class CourseGrade
Manages grades of a course
-
Add or change grades
-
Print out grades
Public Instance Methods
exam_file_to_href(course, student, file)
click to toggle source
# File Views/Course/Grade.rb, line 397 def exam_file_to_href(course, student, file) dst = "#{course.name}/#{student.login_name}" file ? "<a href='/exas/#{dst}/#{file}' target='_blank'>#{file}</a>" : 'Upload file' end
get_grades(ct, grades)
click to toggle source
# File Views/Course/Grade.rb, line 81 def get_grades(ct, grades) means = grades ? grades.means : [''] * ct.tests_nbr.to_i i = 0 ct.tests_arr.zip(means).collect { |t, m| [i += 1, [t, m.to_s]] } end
layout()
click to toggle source
# File Views/Course/Grade.rb, line 6 def layout set_data_class :Courses @update = true @order = 20 # gui_vboxgl do gui_hboxg do gui_vboxg :nogroup do show_table :students, headings: %w(Name Grade Files Status), widths: [250, 40, 40, 50], callback: :click, height: 350, width: 390, single: true #show_list_single :students, :width => 300, :callback => true, :flexheight => 1 show_str_ro :last_synched show_button :prepare_files, :fetch_files, :transfer_files, :sync_server end gui_vbox :nogroup do gui_vbox :nogroup do show_str :first_name, :width => 150 show_str :family_name show_list_drop :gender, '%w( male female n/a )' show_int_ro :files_saved show_str :remark show_table :grades, :headings => %w(Label grade), :widths => [150, 50], :columns => %w(0 align_right), :callback => :edit, :edit => [1], :height => 200 end gui_vbox :nogroup do show_html :name_file_direct show_upload :upload_direct, :callback => true show_button :save, :upload end end gui_window :transfer do show_html :txt show_upload :files show_button :close end gui_window :sync do show_html :synching show_button :close end gui_window :upload_files do show_html :name_file_1 show_upload :upload_file_1, :callback => true show_html :name_file_2 show_upload :upload_file_2, :callback => true show_html :name_file_3 show_upload :upload_file_3, :callback => true show_html :name_file_4 show_upload :upload_file_4, :callback => true show_html :name_file_5 show_upload :upload_file_5, :callback => true show_button :close end end end
new_grades(ct, grade, new_grades)
click to toggle source
# File Views/Course/Grade.rb, line 346 def new_grades(ct, grade, new_grades) return [] unless new_grades means = grade ? grade.means : [] i = 0 ct.tests_arr.zip(means).collect { |t, m| i+= 1 if i == new_grades._element_id.to_i then new_grades._grade.sub(/,/, '.').to_f else m ? m : 0 end } end
rpc_list_choice(session, name, data)
click to toggle source
# File Views/Course/Grade.rb, line 123 def rpc_list_choice(session, name, data) dputs(3) { "rpc_list_choice with #{name} - #{data.inspect}" } ret = [] course_id = data._courses[0] course = Courses.match_by_course_id(course_id) case name when 'courses' if course dputs(3) { 'replying' } ret = rpc_update(session) + reply(:empty_nonlists, :students) + reply(:update, courses: [course_id]) + update_students_table(course) dputs(3) { "CType is #{course.ctype.inspect} - #{course.ctype.files_nbr.inspect}" } buttons = [] if (nbr = course.ctype.files_nbr.to_i) > 0 dputs(3) { 'Putting buttons' } buttons.push :transfer_files, :files_saved buttons.push(if nbr > 1 :upload else ret += reply(:update, upload_direct: course.ctype.files_arr.first) + reply(:update, name_file_direct: 'chose student') [:upload_direct, :name_file_direct] end) if Shares.match_by_name('CourseFiles') buttons.push :prepare_files, :fetch_files end end if course.students.size > 0 && course.list_students.size > 0 first = course.list_students[0][0] ret += reply(:select, students: [first]) + rpc_table_students(session, data.merge(students: [first])) end if course.ctype.diploma_type[0] == 'accredited' and ConfigBase.has_function?(:course_client) buttons.push :sync_server end buttons.each { |b| ret += reply(:unhide, b) } ret += reply_visible(course.ctype.remark.to_s == '[true]', :remark) dputs(4) { "Course is #{course} - ret is #{ret.inspect}" } end end ret end
rpc_table_grades(session, data)
click to toggle source
# File Views/Course/Grade.rb, line 360 def rpc_table_grades(session, data) c_id, p_name = data._courses.first, data._students.first course = Courses.match_by_course_id(c_id) student = Entities.Persons.match_by_login_name(p_name) grade = Entities.Grades.match_by_course_person(c_id, p_name) return unless grades = data._grades.first return unless element = grades._element_id.to_i if course and student means = new_grades(course.ctype, grade, grades) Entities.Grades.save_data({:course => course, :student => student, :means => means, :remark => data._remark}) end if element == course.ctype.tests_nbr.to_i rpc_button_save(session, data) else reply(:focus, {table: 'grades', row: element, col: 1}) end end
rpc_table_students(session, data)
click to toggle source
# File Views/Course/Grade.rb, line 382 def rpc_table_students(session, data) course_id = data._courses[0] course = Courses.match_by_course_id(course_id) student = Entities.Persons.match_by_login_name(data._students.first) file = course.exam_files(student).first reply(:update, name_file_direct: exam_file_to_href(course, student, file)) + update_grade(data) + reply(:focus, {table: 'grades', col: 1, row: 0}) end
rpc_update(session)
click to toggle source
Calls superclass method
# File Views/Course/Grade.rb, line 66 def rpc_update(session) super(session) + reply(:empty_nonlists, [:students]) + [:prepare_files, :fetch_files, :transfer_files, :last_synched, :sync_server, :upload, :files_saved, :upload_direct, :name_file_direct, :remark].collect { |b| reply(:hide, b) }.flatten end
rpc_update_with_values(session, data)
click to toggle source
# File Views/Course/Grade.rb, line 259 def rpc_update_with_values(session, data) ret = [] if course = Courses.match_by_course_id(data._courses[0]) ret = reply(:update, :synching => 'Sync-state:<ul>' + course.sync_state) if course.sync_state =~ /(finished|Error:)/ ret += reply(:auto_update, 0) + update_students_table(course) end end ret end
update_files_saved(course, student)
click to toggle source
# File Views/Course/Grade.rb, line 76 def update_files_saved(course, student) reply(:update, :files_saved => "#{course.exam_files(student).count}/#{course.ctype.files_nbr}") end
update_grade(data)
click to toggle source
# File Views/Course/Grade.rb, line 89 def update_grade(data) c_id, p_name = data._courses[0], data._students[0] if p_name and c_id person = Persons.match_by_login_name(p_name) course = Courses.match_by_course_id(c_id) grade = Entities.Grades.match_by_course_person(c_id, p_name) reply(:update, :grades => get_grades(course.ctype, grade)) + reply(:empty_update, :remark => (grade ? grade.remark : ''))+ update_form_data(person) + update_files_saved(course, p_name) else [] end end
update_students_table(course)
click to toggle source
# File Views/Course/Grade.rb, line 104 def update_students_table(course) reply_table_columns_visible(course.ctype.files_nbr.to_i > 0, students: [2]) + reply_table_columns_visible(course.ctype.diploma_type == %w(accredited), students: [3]) + reply(:update, students: course.students.collect { |s| if person = Persons.match_by_login_name(s) mean, random = if grade = Grades.match_by_course_person(course, person) [grade.mean, grade.random] else ['--', nil] end [s, [person.full_name, mean, course.exam_files(person).length, random ? 'OK' : 'do_sync']] end }.compact.sort_by { |a, b| b[0] }) end