forked from professor/whiteboard
/
registration.rb
58 lines (49 loc) · 1.62 KB
/
registration.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
class Registration < ActiveRecord::Base
belongs_to :course
belongs_to :person
scope :for_course, lambda { |course_id|
where(:course_id => course_id) unless course_id.nil?
}
def self.scoped_by_params( params={} )
# Raise record not found and let controller handle
# response if provided course_id is invalid
course = Course.find_by_id!(params[:course_id]) if params[:course_id].present?
self.for_course(params[:course_id])
end
def self.process_import( courses_data )
result = {
:success => 0,
:failed => 0,
:noop => 0,
:successes => [],
:failures => [],
:noops => []
}
courses_data.each do |imported_course|
course = Course.find_by_id(imported_course.number)
if course.nil?
result[:failed] += imported_course.students.size
result[:failures] << { imported_course.number => imported_course.students.map(&:user_id) }
else
imported_course.students.each do |imported_student|
student = Person.find_by_webiso_account(imported_student.user_id)
result_hash = { imported_course.number => imported_student.user_id }
if student.nil?
result[:failed] += 1
result[:failures] << result_hash
else
if course.students.include?(student)
result[:noop] += 1
result[:noops] << result_hash
else
result[:success] += 1
result[:successes] << result_hash
course.students << student
end
end
end
end
end
result
end
end